Beispiel #1
0
        public override object VisitSpecMachineDecl(PParser.SpecMachineDeclContext context)
        {
            // SPEC name=Iden
            var specMachine = (Machine)nodesToDeclarations.Get(context);

            // spec machines neither send nor receive events.
            specMachine.Receives = new EventSet();
            specMachine.Sends    = new EventSet();

            // OBSERVES eventSetLiteral
            specMachine.Observes = new EventSet();
            foreach (var pEvent in (PEvent[])Visit(context.eventSetLiteral()))
            {
                specMachine.Observes.AddEvent(pEvent);
            }

            // machineBody
            using (currentScope.NewContext(specMachine.Scope))
                using (currentMachine.NewContext(specMachine))
                {
                    Visit(context.machineBody());
                }

            return(specMachine);
        }
Beispiel #2
0
        public override object VisitSpecMachineDecl(PParser.SpecMachineDeclContext context)
        {
            string  symbolName = context.name.GetText();
            Machine decl       = CurrentScope.Put(symbolName, context);

            nodesToDeclarations.Put(context, decl);
            return(VisitChildrenWithNewScope(decl, context));
        }
Beispiel #3
0
        public Machine Put(string name, PParser.SpecMachineDeclContext tree)
        {
            Machine specMachine = new Machine(name, tree);

            CheckConflicts(
                specMachine,
                Namespace(machines),
                Namespace(interfaces),
                Namespace(enums),
                Namespace(typedefs));
            machines.Add(name, specMachine);
            return(specMachine);
        }
        public override object VisitSpecMachineDecl(PParser.SpecMachineDeclContext context)
        {
            // SPEC name=Iden
            var specMachine = (Machine)nodesToDeclarations.Get(context);

            // OBSERVES eventSetLiteral
            specMachine.Observes = new NamedEventSet($"{specMachine.Name}$eventset", context.eventSetLiteral());
            specMachine.Observes.AddEvents((PEvent[])Visit(context.eventSetLiteral()));
            // machineBody
            using (currentScope.NewContext(specMachine.Scope))
                using (currentMachine.NewContext(specMachine))
                {
                    Visit(context.machineBody());
                }

            return(specMachine);
        }