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 }