Exemple #1
0
        public override void Visit(IfElseChainNode node)
        {
            Emit("if (");
            Visit(node.IfNodes[0].Predicate);
            Emit(") {\n");
            Visit(node.IfNodes[0].Body);
            Emit("} ");

            foreach (IfNode elseifNode in node.IfNodes.Skip(1))
            {
                Emit("else if (");
                Visit(elseifNode.Predicate);
                Emit(") {\n");
                Visit(elseifNode.Body);
                Emit("} ");
            }

            if (node.ElseBody is not null)
            {
                Emit("else {\n");
                Visit(node.ElseBody);
                Emit("}\n");
            }
            else
            {
                Emit("\n");
            }
        }
Exemple #2
0
        public override Node VisitIfStmt(ML4DParser.IfStmtContext context)
        {
            IfElseChainNode ifElseChainNode = new IfElseChainNode();
            int             predicates      = context._pred.Count;
            int             bodies          = context._body.Count;

            ifElseChainNode.IfNodes.Add(new IfNode((ExpressionNode)Visit(context._pred[0]),
                                                   (LinesNode)Visit(context._body[0])));
            if (predicates == 1 && predicates < bodies)
            {
                ifElseChainNode.ElseBody = (LinesNode)Visit(context._body[bodies - 1]);
            }

            if (predicates > 1 && predicates == bodies)
            {
                for (int i = 1; i < bodies; i++)
                {
                    ifElseChainNode.IfNodes.Add(new IfNode((ExpressionNode)Visit(context._pred[i]),
                                                           (LinesNode)Visit(context._body[i])));
                }
            }
            else if (predicates > 1 && predicates < bodies)
            {
                for (int i = 1; i < predicates; i++)
                {
                    ifElseChainNode.IfNodes.Add(new IfNode((ExpressionNode)Visit(context._pred[i]),
                                                           (LinesNode)Visit(context._body[i])));
                }
                ifElseChainNode.ElseBody = (LinesNode)Visit(context._body[bodies - 1]);
            }
            return(ifElseChainNode);
        }
        public override void Visit(IfElseChainNode node)
        {
            foreach (IfNode ifNode in node.IfNodes)
            {
                Visit(ifNode);
            }

            if (node.ElseBody is not null)
            {
                SymbolTable.OpenScope();
                Visit(node.ElseBody);
                SymbolTable.CloseScope();
            }
        }
Exemple #4
0
 public virtual void Visit(IfElseChainNode node)
 {
     VisitChildren(node);
 }