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)*
|
start: (instruction)*
|
||||||
|
|
||||||
instruction: declaration ";"
|
instruction: declaration ";"
|
||||||
| assignation ";"
|
| assignation ";"
|
||||||
| SHOW_KW expression ("," expression)* ";" -> afficher
|
| SHOW_KW expression ("," expression)* ";" -> afficher
|
||||||
| ADD_KW expression "dans" VARIABLE ";" -> append
|
| ADD_KW expression "dans" VARIABLE ";" -> append
|
||||||
| controls
|
| controls
|
||||||
|
|
||||||
// rule finishing by u are "UnambigiousED"
|
// rule finishing by u are "UnambigiousED"
|
||||||
expression: logical
|
expression: logical
|
||||||
|
4
spf.py
4
spf.py
@ -19,7 +19,7 @@ class SPFInterpreter(lark.visitors.Interpreter):
|
|||||||
old = self.variables.variables.copy()
|
old = self.variables.variables.copy()
|
||||||
while self.visit_children(el.children[0])[0]:
|
while self.visit_children(el.children[0])[0]:
|
||||||
self.visit_children(el.children[1])
|
self.visit_children(el.children[1])
|
||||||
self.variables.variables = old.copy()
|
self.variables.variables = old.copy()
|
||||||
|
|
||||||
def for_loop(self, el):
|
def for_loop(self, el):
|
||||||
type = el.children[0].value
|
type = el.children[0].value
|
||||||
@ -30,6 +30,7 @@ class SPFInterpreter(lark.visitors.Interpreter):
|
|||||||
except SPFException as e:
|
except SPFException as e:
|
||||||
e.errorline = el.meta.line
|
e.errorline = el.meta.line
|
||||||
raise e
|
raise e
|
||||||
|
old_inloop = self.variables.variables.copy()
|
||||||
|
|
||||||
target = self.visit_children(el.children[2])[0]
|
target = self.visit_children(el.children[2])[0]
|
||||||
for i in target:
|
for i in target:
|
||||||
@ -39,6 +40,7 @@ class SPFInterpreter(lark.visitors.Interpreter):
|
|||||||
e.errorline = el.meta.line
|
e.errorline = el.meta.line
|
||||||
raise e
|
raise e
|
||||||
self.visit_children(el.children[3])
|
self.visit_children(el.children[3])
|
||||||
|
self.variables.variables = old_inloop.copy()
|
||||||
self.variables.variables = old.copy()
|
self.variables.variables = old.copy()
|
||||||
|
|
||||||
def afficher(self, el):
|
def afficher(self, el):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user