|
1 | | -# from antlr4 import ParserRuleContext |
2 | 1 | from generated.MyParser import MyParser |
3 | 2 | from generated.MyParserVisitor import MyParserVisitor |
| 3 | +from utils.values import Int, Float, String |
4 | 4 |
|
5 | 5 |
|
6 | 6 | class Interpreter(MyParserVisitor): |
7 | 7 | def visitProgram(self, ctx: MyParser.ProgramContext): |
8 | | - print("Program") |
9 | | - return self.visitChildren(ctx) |
| 8 | + return self.visitChildren(ctx) # todo |
10 | 9 |
|
11 | 10 | def visitScopeStatement(self, ctx: MyParser.ScopeStatementContext): |
12 | | - return self.visitChildren(ctx) |
| 11 | + return self.visitChildren(ctx) # todo |
13 | 12 |
|
14 | 13 | def visitSimpleStatement(self, ctx: MyParser.SimpleStatementContext): |
15 | | - return self.visitChildren(ctx) |
| 14 | + return self.visitChildren(ctx) # todo |
16 | 15 |
|
17 | 16 | def visitIfThenElse(self, ctx: MyParser.IfThenElseContext): |
18 | | - return self.visitChildren(ctx) |
| 17 | + return self.visitChildren(ctx) # todo |
19 | 18 |
|
20 | 19 | def visitIf(self, ctx: MyParser.IfContext): |
21 | | - return self.visitChildren(ctx) |
| 20 | + return self.visitChildren(ctx) # todo |
22 | 21 |
|
23 | 22 | def visitThen(self, ctx: MyParser.ThenContext): |
24 | | - return self.visitChildren(ctx) |
| 23 | + return self.visitChildren(ctx) # todo |
25 | 24 |
|
26 | 25 | def visitElse(self, ctx: MyParser.ElseContext): |
27 | | - return self.visitChildren(ctx) |
| 26 | + return self.visitChildren(ctx) # todo |
28 | 27 |
|
29 | 28 | def visitForLoop(self, ctx: MyParser.ForLoopContext): |
30 | | - return self.visitChildren(ctx) |
| 29 | + return self.visitChildren(ctx) # todo |
31 | 30 |
|
32 | 31 | def visitRange(self, ctx: MyParser.RangeContext): |
33 | | - return self.visitChildren(ctx) |
| 32 | + return self.visitChildren(ctx) # todo |
34 | 33 |
|
35 | 34 | def visitWhileLoop(self, ctx: MyParser.WhileLoopContext): |
36 | | - return self.visitChildren(ctx) |
| 35 | + return self.visitChildren(ctx) # todo |
37 | 36 |
|
38 | 37 | def visitComparison(self, ctx: MyParser.ComparisonContext): |
39 | | - return self.visitChildren(ctx) |
| 38 | + return self.visitChildren(ctx) # todo |
40 | 39 |
|
41 | 40 | def visitSimpleAssignment(self, ctx: MyParser.SimpleAssignmentContext): |
42 | | - return self.visitChildren(ctx) |
| 41 | + return self.visitChildren(ctx) # todo |
43 | 42 |
|
44 | 43 | def visitCompoundAssignment(self, ctx: MyParser.CompoundAssignmentContext): |
45 | | - return self.visitChildren(ctx) |
| 44 | + return self.visitChildren(ctx) # todo |
46 | 45 |
|
47 | 46 | def visitPrint(self, ctx: MyParser.PrintContext): |
48 | | - return self.visitChildren(ctx) |
| 47 | + for i in range(1, len(ctx.children) - 1, 2): |
| 48 | + print(self.visit(ctx.children[i]).value) |
49 | 49 |
|
50 | 50 | def visitReturn(self, ctx: MyParser.ReturnContext): |
51 | | - return self.visitChildren(ctx) |
| 51 | + return self.visitChildren(ctx) # todo |
52 | 52 |
|
53 | 53 | def visitBinaryExpression(self, ctx: MyParser.BinaryExpressionContext): |
54 | | - return self.visitChildren(ctx) |
| 54 | + a = self.visit(ctx.getChild(0)) |
| 55 | + b = self.visit(ctx.getChild(2)) |
| 56 | + match ctx.op.type: |
| 57 | + case MyParser.PLUS: |
| 58 | + return a + b |
| 59 | + case MyParser.MINUS: |
| 60 | + return a - b |
| 61 | + case MyParser.MULTIPLY: |
| 62 | + return a * b |
| 63 | + case MyParser.DIVIDE: |
| 64 | + return a / b |
| 65 | + # todo: MAT_* operations |
55 | 66 |
|
56 | 67 | def visitParenthesesExpression(self, ctx: MyParser.ParenthesesExpressionContext): |
57 | | - return self.visitChildren(ctx) |
| 68 | + return self.visit(ctx.getChild(1)) |
58 | 69 |
|
59 | 70 | def visitTransposeExpression(self, ctx: MyParser.TransposeExpressionContext): |
60 | | - return self.visitChildren(ctx) |
| 71 | + return self.visitChildren(ctx) # todo |
61 | 72 |
|
62 | 73 | def visitMinusExpression(self, ctx: MyParser.MinusExpressionContext): |
63 | | - return self.visitChildren(ctx) |
| 74 | + return self.visitChildren(ctx) # todo |
64 | 75 |
|
65 | 76 | def visitSingleExpression(self, ctx: MyParser.SingleExpressionContext): |
66 | | - return self.visitChildren(ctx) |
| 77 | + return self.visit(ctx.getChild(0)) |
67 | 78 |
|
68 | 79 | def visitSpecialMatrixFunction(self, ctx: MyParser.SpecialMatrixFunctionContext): |
69 | | - return self.visitChildren(ctx) |
| 80 | + return self.visitChildren(ctx) # todo |
70 | 81 |
|
71 | 82 | def visitBreak(self, ctx: MyParser.BreakContext): |
72 | | - return self.visitChildren(ctx) |
| 83 | + return self.visitChildren(ctx) # todo |
73 | 84 |
|
74 | 85 | def visitContinue(self, ctx: MyParser.ContinueContext): |
75 | | - return self.visitChildren(ctx) |
| 86 | + return self.visitChildren(ctx) # todo |
76 | 87 |
|
77 | 88 | def visitVector(self, ctx: MyParser.VectorContext): |
78 | | - return self.visitChildren(ctx) |
| 89 | + return self.visitChildren(ctx) # todo |
79 | 90 |
|
80 | 91 | def visitElementReference(self, ctx: MyParser.ElementReferenceContext): |
81 | | - return self.visitChildren(ctx) |
| 92 | + return self.visitChildren(ctx) # todo |
82 | 93 |
|
83 | 94 | def visitId(self, ctx: MyParser.IdContext): |
84 | | - return self.visitChildren(ctx) |
| 95 | + return self.visitChildren(ctx) # todo |
85 | 96 |
|
86 | 97 | def visitInt(self, ctx: MyParser.IntContext): |
87 | | - return self.visitChildren(ctx) |
| 98 | + return Int(ctx.getText()) |
88 | 99 |
|
89 | 100 | def visitFloat(self, ctx: MyParser.FloatContext): |
90 | | - return self.visitChildren(ctx) |
| 101 | + return Float(ctx.getText()) |
91 | 102 |
|
92 | 103 | def visitString(self, ctx: MyParser.StringContext): |
93 | | - return self.visitChildren(ctx) |
| 104 | + return String(ctx.getText()) |
0 commit comments