Fixing loop variables
This commit is contained in:
parent
e2e058c8ac
commit
69d2bbaaf3
15
examples/boucles_var.spf
Normal file
15
examples/boucles_var.spf
Normal file
@ -0,0 +1,15 @@
|
||||
entier x = 0;
|
||||
tant que x < 10 faire {
|
||||
entier y = x;
|
||||
x = x + 1;
|
||||
afficher x, y;
|
||||
}
|
||||
|
||||
afficher "yess";
|
||||
|
||||
pour chaque entier i dans [1:5] faire {
|
||||
entier y = i;
|
||||
y = y + i;
|
||||
x = x + i;
|
||||
afficher x, y;
|
||||
}
|
8
spf.lark
8
spf.lark
@ -1,10 +1,10 @@
|
||||
start: (instruction)*
|
||||
|
||||
instruction: declaration ";"
|
||||
| assignation ";"
|
||||
| SHOW_KW expression ("," expression)* ";" -> afficher
|
||||
| ADD_KW expression "dans" VARIABLE ";" -> append
|
||||
| controls
|
||||
| assignation ";"
|
||||
| SHOW_KW expression ("," expression)* ";" -> afficher
|
||||
| ADD_KW expression "dans" VARIABLE ";" -> append
|
||||
| controls
|
||||
|
||||
// rule finishing by u are "UnambigiousED"
|
||||
expression: logical
|
||||
|
4
spf.py
4
spf.py
@ -19,7 +19,7 @@ class SPFInterpreter(lark.visitors.Interpreter):
|
||||
old = self.variables.variables.copy()
|
||||
while self.visit_children(el.children[0])[0]:
|
||||
self.visit_children(el.children[1])
|
||||
self.variables.variables = old.copy()
|
||||
self.variables.variables = old.copy()
|
||||
|
||||
def for_loop(self, el):
|
||||
type = el.children[0].value
|
||||
@ -30,6 +30,7 @@ class SPFInterpreter(lark.visitors.Interpreter):
|
||||
except SPFException as e:
|
||||
e.errorline = el.meta.line
|
||||
raise e
|
||||
old_inloop = self.variables.variables.copy()
|
||||
|
||||
target = self.visit_children(el.children[2])[0]
|
||||
for i in target:
|
||||
@ -39,6 +40,7 @@ class SPFInterpreter(lark.visitors.Interpreter):
|
||||
e.errorline = el.meta.line
|
||||
raise e
|
||||
self.visit_children(el.children[3])
|
||||
self.variables.variables = old_inloop.copy()
|
||||
self.variables.variables = old.copy()
|
||||
|
||||
def afficher(self, el):
|
||||
|
Loading…
x
Reference in New Issue
Block a user