7
7
from utils .values import Int , Float , String , Vector
8
8
9
9
10
+ class Break (Exception ):
11
+ pass
12
+
13
+
14
+ class Continue (Exception ):
15
+ pass
16
+
17
+
10
18
class Interpreter (MyParserVisitor ):
11
19
def __init__ (self ):
12
20
self .memory_stack = MemoryStack ()
@@ -36,7 +44,12 @@ def visitForLoop(self, ctx: MyParser.ForLoopContext):
36
44
while a <= b :
37
45
self .memory_stack .put (variable , Int (a ))
38
46
a = a + 1 # to increment enumerateor and disregard changes inside the loop
39
- self .visit (ctx .statement ())
47
+ try :
48
+ self .visit (ctx .statement ())
49
+ except Continue :
50
+ continue
51
+ except Break :
52
+ break
40
53
41
54
def visitRange (self , ctx : MyParser .RangeContext ):
42
55
a = self .visit (ctx .expression (0 ))
@@ -47,7 +60,12 @@ def visitRange(self, ctx: MyParser.RangeContext):
47
60
48
61
def visitWhileLoop (self , ctx : MyParser .WhileLoopContext ):
49
62
while self .visit (ctx .comparison ()):
50
- self .visit (ctx .statement ())
63
+ try :
64
+ self .visit (ctx .statement ())
65
+ except Continue :
66
+ continue
67
+ except Break :
68
+ break
51
69
52
70
def visitComparison (self , ctx : MyParser .ComparisonContext ):
53
71
a = self .visit (ctx .expression (0 ))
@@ -153,10 +171,10 @@ def visitSpecialMatrixFunction(self, ctx: MyParser.SpecialMatrixFunctionContext)
153
171
return vector
154
172
155
173
def visitBreak (self , ctx : MyParser .BreakContext ):
156
- return self . visitChildren ( ctx ) # todo
174
+ raise Break ()
157
175
158
176
def visitContinue (self , ctx : MyParser .ContinueContext ):
159
- return self . visitChildren ( ctx ) # todo
177
+ raise Continue ()
160
178
161
179
def visitVector (self , ctx : MyParser .VectorContext ):
162
180
elements = [
0 commit comments