Exemple #1
0
        HandlerDecl handlerDecl()
        {
            List <Assignment> context = new List <Assignment>();

            Trigger lhs = trigger();

            match(EngageToken.ARROW);

            Reaction rhs = reaction();

            if (LookAhead(EngageToken.KW_WHERE))
            {
                match(EngageToken.KW_WHERE);

                Assignment a = assignment();
                context.Add(a);

                while (LookAhead(EngageToken.COMMA))
                {
                    match(EngageToken.COMMA);
                    a = assignment();
                    context.Add(a);
                }
            }

            HandlerDecl hd = new HandlerDecl();

            hd.LHS     = lhs;
            hd.RHS     = rhs;
            hd.Context = context;
            return(hd);
        }
Exemple #2
0
        private EngSpec EngageSpec()
        {
            var tds = new List <TypeDecl>();
            var lds = new List <TokenDecl>();
            var hds = new List <HandlerDecl>();

            match(EngageToken.KW_NAMESPACE);
            string ns = consumeText(EngageToken.ID);

            match(EngageToken.KW_TYPES);
            while (la_typeDecl())
            {
                tds.Add(TypeDeclaration());
            }

            match(EngageToken.KW_TOKENS);
            while (la_tokenDecl())
            {
                lds.Add(TokenDeclaration());
            }

            match(EngageToken.KW_HANDLERS);
            while (la_handlerDecl())
            {
                HandlerDecl hd = handlerDecl();
                hds.Add(hd);
            }

            return(new EngSpec
            {
                NS = ns,
                Types = tds,
                Tokens = lds,
                Handlers = hds
            });
        }