public override Node VisitInfixValueExpr(ML4DParser.InfixValueExprContext context) { InfixExpressionNode node; switch (context.op.Type) { case ML4DLexer.PLUS: node = new AdditionNode("+"); break; case ML4DLexer.MINUS: node = new SubtractionNode("-"); break; case ML4DLexer.MUL: node = new MultiplicationNode("*"); break; case ML4DLexer.DIV: node = new DivisionNode("/"); break; case ML4DLexer.POW: node = new PowerNode("**"); break; default: throw new NotSupportedException( $"The operator {context.op.Text}, is not a valid arithmetic operator."); } node.Left = (ExpressionNode)Visit(context.left); node.Right = (ExpressionNode)Visit(context.right); return(node); }
/// <summary> /// Exit a parse tree produced by the <c>infixValueExpr</c> /// labeled alternative in <see cref="ML4DParser.expr"/>. /// <para>The default implementation does nothing.</para> /// </summary> /// <param name="context">The parse tree.</param> public virtual void ExitInfixValueExpr([NotNull] ML4DParser.InfixValueExprContext context) { }
/// <summary> /// Visit a parse tree produced by the <c>infixValueExpr</c> /// labeled alternative in <see cref="ML4DParser.expr"/>. /// <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 VisitInfixValueExpr([NotNull] ML4DParser.InfixValueExprContext context) { return(VisitChildren(context)); }