public override ExecutionContext VisitSelection(Cosmos.SelectionContext context) { var evaluation = expressionVisitor.Visit(context.base_si().condition); if (evaluation.Boolean().Value) { foreach (var instructionIntegree in context.base_si().instruction()) { Visit(instructionIntegree); } return(null); } else if (context.sinon_si() != null) { foreach (var elsif in context.sinon_si()) { if (expressionVisitor.Visit(elsif.base_si().condition).Boolean().Value) { foreach (var instructionIntegree in elsif.base_si().instruction()) { Visit(instructionIntegree); } return(null); //only 1 elsif branch } } } //The check is redundant with the return in the if... but double security if (evaluation.Boolean().Value == false && context.sinon() != null) { foreach (var instructionIntegree in context.sinon().instruction()) { Visit(instructionIntegree); } } return(null); }
/// <summary> /// Visit a parse tree produced by <see cref="Cosmos.selection"/>. /// <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 VisitSelection([NotNull] Cosmos.SelectionContext context) { return(VisitChildren(context)); }
/// <summary> /// Exit a parse tree produced by <see cref="Cosmos.selection"/>. /// <para>The default implementation does nothing.</para> /// </summary> /// <param name="context">The parse tree.</param> public virtual void ExitSelection([NotNull] Cosmos.SelectionContext context) { }