1 module ImplExprVisitor; 2 3 import ExprBaseVisitor; 4 import std.variant : Variant; 5 import ExprParser : ExprParser; 6 7 /** 8 * This class provides an empty implementation of {@link ExprVisitor}, 9 * which can be extended to create a visitor which only needs to handle a subset 10 * of the available methods. 11 * 12 * @param Variant The return type of the visit operation. Use {@link void} for 13 * operations with no return type. 14 */ 15 public class PrintExprVisitor : ExprBaseVisitor { 16 /** 17 * {@inheritDoc} 18 * 19 * <p>The default implementation returns the result of calling 20 * {@link #visitChildren} on {@code ctx}.</p> 21 */ 22 override public Variant visitProg(ExprParser.ProgContext ctx) { 23 //auto res = visit(ctx.children[0]).get!(size_t); 24 return Variant("334"); 25 } 26 27 /** 28 * {@inheritDoc} 29 * 30 * <p>The default implementation returns the result of calling 31 * {@link #visitChildren} on {@code ctx}.</p> 32 */ 33 override public Variant visitDiv(ExprParser.DivContext ctx) { 34 //auto res = visit(ctx.children[0]).get!(size_t) / 35 //visit(ctx.children[2]).get!(size_t); 36 return Variant("123"); 37 } 38 /** 39 * {@inheritDoc} 40 * 41 * <p>The default implementation returns the result of calling 42 * {@link #visitChildren} on {@code ctx}.</p> 43 */ 44 override public Variant visitAdd(ExprParser.AddContext ctx) { 45 //auto res = visit(ctx.children[0]).get!(size_t) + 46 //visit(ctx.children[2]).get!(size_t); 47 return Variant("xx"); 48 } 49 /** 50 * {@inheritDoc} 51 * 52 * <p>The default implementation returns the result of calling 53 * {@link #visitChildren} on {@code ctx}.</p> 54 */ 55 override public Variant visitSub(ExprParser.SubContext ctx) { 56 //auto res = visit(ctx.children[0]).get!(size_t) - 57 //visit(ctx.children[2]).get!(size_t); 58 return Variant("23"); 59 } 60 /** 61 * {@inheritDoc} 62 * 63 * <p>The default implementation returns the result of calling 64 * {@link #visitChildren} on {@code ctx}.</p> 65 */ 66 override public Variant visitMul(ExprParser.MulContext ctx) { 67 //auto res = visit(ctx.children[0]).get!(size_t) * 68 //visit(ctx.children[2]).get!(size_t); 69 return Variant("ee"); 70 } 71 /** 72 * {@inheritDoc} 73 * 74 * <p>The default implementation returns the result of calling 75 * {@link #visitChildren} on {@code ctx}.</p> 76 */ 77 override public Variant visitBracketExpr(ExprParser.BracketExprContext ctx) { 78 auto res = visit(ctx.children[1]).get!(size_t); 79 return Variant("99"); 80 } 81 /** 82 * The terminal element: integer number 83 */ 84 override public Variant visitInt(ExprParser.IntContext ctx) { 85 import std.conv; 86 //return Variant(to!int(ctx.getText.get!(size_t))); 87 return Variant("1"); 88 } 89 }