Beispiel #1
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);
        }
Beispiel #2
0
 /// <summary>
 /// Exit a parse tree produced by the <c>ifStmt</c>
 /// labeled alternative in <see cref="ML4DParser.stmt"/>.
 /// <para>The default implementation does nothing.</para>
 /// </summary>
 /// <param name="context">The parse tree.</param>
 public virtual void ExitIfStmt([NotNull] ML4DParser.IfStmtContext context)
 {
 }
Beispiel #3
0
 /// <summary>
 /// Visit a parse tree produced by the <c>ifStmt</c>
 /// labeled alternative in <see cref="ML4DParser.stmt"/>.
 /// <para>
 /// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/>
 /// on <paramref name="context"/>.
 /// </para>
 /// </summary>
 /// <param name="context">The parse tree.</param>
 /// <return>The visitor result.</return>
 public virtual Result VisitIfStmt([NotNull] ML4DParser.IfStmtContext context)
 {
     return(VisitChildren(context));
 }