public override StatementNode VisitMatchStatement([NotNull] CoronaParser.MatchStatementContext context) { BuildValueAst valueVisitor = new BuildValueAst(); BuildExpressionAst exprVisitor = new BuildExpressionAst(); // Visit each of the different elements to match against List <ValueNode> elements = new List <ValueNode>(); foreach (var e in context.matchElement()) { try { if (e.member() != null) { elements.Add(valueVisitor.Visit(e.member())); } else if (e.gridPoint() != null) { elements.Add(valueVisitor.Visit(e.gridPoint())); } else if (e.expr() != null) { elements.Add(exprVisitor.Visit(e.expr())); } } catch (TheLanguageErrorException excep) { throw new TheLanguageErrorException("Match statement value", excep); } } // Visit each CaseStatement List <CaseStatementNode> caseStatements = new List <CaseStatementNode>(); try { foreach (CoronaParser.CaseStatementContext c in context.caseStatement()) { caseStatements.Add((CaseStatementNode)Visit(c)); } } catch (TheLanguageErrorException e) { throw new TheLanguageErrorException("Match statement", e); } return(new MatchStatementNode(elements, caseStatements)); }
/// <summary> /// Visit a parse tree produced by <see cref="CoronaParser.matchStatement"/>. /// <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 VisitMatchStatement([NotNull] CoronaParser.MatchStatementContext context) { return(VisitChildren(context)); }
/// <summary> /// Exit a parse tree produced by <see cref="CoronaParser.matchStatement"/>. /// <para>The default implementation does nothing.</para> /// </summary> /// <param name="context">The parse tree.</param> public virtual void ExitMatchStatement([NotNull] CoronaParser.MatchStatementContext context) { }