Ejemplo n.º 1
0
        public override ImperativeNode VisitElseIfNode(ElseIfBlock node)
        {
            var newExpr = node.Expr.Accept(this);

            if (node.Expr != newExpr)
            {
                node.Expr = newExpr;
            }

            node.Body = VisitNodeList(node.Body);
            return(node);
        }
Ejemplo n.º 2
0
        void ifstmt(out Node node)
        {
            IfStmtNode ifStmtNode = new IfStmtNode();
            NodeList   body       = null;

            Expect(19);
            Expect(8);
            expr(out node);
            ifStmtNode.IfExprNode = node;
            Expect(9);
            if (StartOf(2))
            {
                Node singleStmt;
                stmt(out singleStmt);
                ifStmtNode.IfBody.Add(singleStmt);
            }
            else if (la.kind == 32)
            {
                Get();
                stmtlist(out body);
                ifStmtNode.IfBody = body;
                Expect(33);
            }
            else
            {
                SynErr(54);
            }
            while (la.kind == 20)
            {
                ElseIfBlock elseifBlock = new ElseIfBlock();
                Get();
                Expect(8);
                expr(out node);
                elseifBlock.Expr = node;
                Expect(9);
                if (StartOf(2))
                {
                    Node singleStmt = null;
                    stmt(out singleStmt);
                    elseifBlock.Body.Add(singleStmt);
                }
                else if (la.kind == 32)
                {
                    Get();
                    stmtlist(out body);
                    elseifBlock.Body = body;
                    Expect(33);
                }
                else
                {
                    SynErr(55);
                }
                ifStmtNode.ElseIfList.Add(elseifBlock);
            }
            if (la.kind == 21)
            {
                Get();
                if (StartOf(2))
                {
                    Node singleStmt = null;
                    stmt(out singleStmt);
                    ifStmtNode.ElseBody.Add(singleStmt);
                }
                else if (la.kind == 32)
                {
                    Get();
                    stmtlist(out body);
                    ifStmtNode.ElseBody = body;
                    Expect(33);
                }
                else
                {
                    SynErr(56);
                }
            }
            node = ifStmtNode;
        }
Ejemplo n.º 3
0
 public virtual void VisitElseIfNode(ElseIfBlock node)
 {
     DefaultVisit(node);
 }
 public virtual bool VisitElseIfNode(ElseIfBlock node)
 {
     return(DefaultVisit(node));
 }