// Infix arithmetic expression public override ASTNode VisitInfixArithmeticExpr(CLUBSParser.InfixArithmeticExprContext context) { SourcePosition sourcePosition = new SourcePosition(context.start); InfixOperatorNode node; // Get the correct Infix operator by switching on the operator token switch (context.op.Type) { case CLUBSParser.MUL: node = new MultiplicationNode(sourcePosition); break; case CLUBSParser.DIV: node = new DivisionNode(sourcePosition); break; case CLUBSParser.ADD: node = new AdditionNode(sourcePosition); break; case CLUBSParser.SUB: node = new SubtractionNode(sourcePosition); break; default: throw new Exception("Operator not found"); } node.Left = Visit(context.left) as ExpressionNode; node.Right = Visit(context.right) as ExpressionNode; return(node); }
public abstract T Visit(SubtractionNode node, object obj);
// Subtraction operator public override string Visit(SubtractionNode node, object obj) { return($"{Visit(node.Left)} - {Visit(node.Right)}"); }
// Subtraction operator public override TypeNode Visit(SubtractionNode node, object obj) { return(VisitInfixArithmeticExpression(node)); // Call generic infix arithmetic expression visit method }