// 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(MultiplicationNode node, object obj);
// Multiplication operator public override string Visit(MultiplicationNode node, object obj) { return($"{Visit(node.Left)} * {Visit(node.Right)}"); }
// Multiplication operator public override TypeNode Visit(MultiplicationNode node, object obj) { return(VisitInfixArithmeticExpression(node)); // Call generic infix arithmetic expression visit method }