Exemplo n.º 1
0
        public ExprSeq ParseExprSeq(ParseFlag flags = ParseFlag.None)
        {
            CurrentState.ParseFlags |= flags;
            //
            ExprSeq = new ExprSeq();
            Expression expr = null;

            if (CurrentToken.Kind == TokenKind.RoundList)
            {
                if (CurrentList.Count != 0)
                {
                    CreateState(CurrentList);
                    expr = ParseExpression();
                    PopState();
                }
                Advance();
            }
            else
            {
                expr = ParseExpression();
            }
            if (expr == null)
            {
                return(null);
            }
            if (!(expr is ClauseExpr))
            {
                //Debug.Print(expr.ToString());
                ExprSeq.AddChild(expr);
            }

            return(ExprSeq);
        }
Exemplo n.º 2
0
        public ClauseExpr EvalClause(Token op)
        {
            Expression argument  = PopExpr();
            Expression subject   = PopExpr();
            Expression klassExpr = null;

            if (subject == Expression.Nil)
            {
                subject   = BuiltinDefs.Self.CreateName();
                klassExpr = BuiltinDefs.Perform.CreateName();
            }
            else if (subject.IsClauseExpr)
            {
                subject = new Name(TokenInstance.CSharp._BWXSUBJECT);
            }
            Expression predicate = new Name(op);
            ClauseExpr expr      = new ClauseExpr(subject, predicate, argument);

            expr.AtomTypeExpr = klassExpr;

            PushExpr(expr);
            //
            ExprSeq.AddChild(expr);
            return(expr);
        }
Exemplo n.º 3
0
        void ParseContextItem(ContextDef parent)
        {
            PushNode(parent);
            ExprSeq exprSeq = ParseExprSeq(ParseFlag.ParseLines);

            //parent.ExprSeq = expr;
            parent.CreateTopicDef(exprSeq);
            PopNode();
        }
Exemplo n.º 4
0
        public void EvalEqual(Token op)
        {
            Expression argument = PopExpr();
            Expression subject  = PopExpr();
            Expression expr     = Create.Equal(op, subject, argument);

            ExprSeq.AddChild(expr);
            PushExpr(expr);
        }
Exemplo n.º 5
0
        void ParseCondition()
        {
            LhsCondStmt def = new LhsCondStmt();

            PushNode(def);
            ExprSeq expr = ParseExprSeq();

            PopNode();

            def.ExprSeq = expr;
            CurrentNode.AddChild(def);
        }
Exemplo n.º 6
0
        MessageEffect ParseMessageEffect()
        {
            MessageEffect effect = new MessageEffect();

            PushNode(effect);
            ExprSeq expr = ParseExprSeq();

            PopNode();
            //TODO:!!!:Add new keyword support
            //ParseProperties(messageEffect);
            //parent.Add(effect);
            effect.ExprSeq = expr;
            PeekNode().AddChild(effect);
            return(effect);
        }
Exemplo n.º 7
0
        void ParseTrigger(TaskDef taskDef)
        {
            TriggerStmt triggerDecl = new TriggerStmt(taskDef);

            PushNode(triggerDecl);
            ExprSeq exprSeq = ParseExprSeq();

            PopNode();
            //
            triggerDecl.ExprSeq = exprSeq;
            taskDef.TriggerDef  = triggerDecl;
            bool isCreator = taskDef.IsCreator;

            taskDef.Parent.AddTriggerDef(taskDef.TriggerDef, isCreator);
        }
Exemplo n.º 8
0
        void ParseCase(AstNode parent)
        {
            Advance(); //past name
            CaseStmt def = new CaseStmt(CurrentToken);

            //
            PushNode(def);
            ExprSeq expr = ParseExprSeq();

            PopNode();

            def.ExprSeq = expr;
            parent.AddChild(def);

            ParseRhs(def);
        }