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); }
/// <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)); }