예제 #1
0
        public override object VisitIfStmt([NotNull] CalculatorParser.IfStmtContext context)
        {
            var    exprs     = context.expression();
            var    blocks    = context.block();
            object result    = null;
            bool   hasElse   = blocks.Length - exprs.Length == 1;
            bool   condition = Convert.ToBoolean(context.expression()[0].Accept(this));

            if (condition)
            {
                result = context.block()[0].Accept(this);
                return(result);
            }
            for (int i = 1; i < (hasElse ? exprs.Length - 1 : exprs.Length); i++)
            {
                condition = Convert.ToBoolean(context.expression()[i].Accept(this));
                if (condition)
                {
                    result = context.block()[i].Accept(this);
                    return(result);
                }
            }
            if (hasElse)
            {
                result = context.block()[context.block().Length - 1].Accept(this);
            }
            return(result);
        }
예제 #2
0
 /// <summary>
 /// Visit a parse tree produced by <see cref="CalculatorParser.ifStmt"/>.
 /// <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] CalculatorParser.IfStmtContext context)
 {
     return(VisitChildren(context));
 }