Adding list accessor and for loop

This commit is contained in:
Anthony Debucquoy
2025-03-20 21:11:17 +01:00
parent 948b335cb5
commit 1a181095c6
3 changed files with 32 additions and 5 deletions

23
spf.py
View File

@ -16,10 +16,18 @@ class SPFInterpreter(lark.visitors.Interpreter):
def while_loop(self, el):
while self.visit_children(el.children[0])[0]:
[self.visit_children(i) for i in el.children[1:]]
self.visit_children(el.children[1])
def for_loop(self, el):
print("TODO: for")
type = el.children[0].value
name = el.children[1].value
self.variables.declare(type, name)
target = self.visit_children(el.children[2])[0]
for i in target:
self.variables.assign(name, i)
self.visit_children(el.children[3])
# TODO: delete the variable out of scope
def afficher(self, el):
ligne = ""
@ -101,6 +109,10 @@ class SPFInterpreter(lark.visitors.Interpreter):
sizeof = lambda self, el:len(self.visit_children(el)[1])
def list_get(self, el):
(left, right) = self.visit_children(el)
return left[right]
def expression(self, el):
return self.visit_children(el)[0]
@ -111,6 +123,13 @@ class SPFInterpreter(lark.visitors.Interpreter):
def variable(self, el):
return self.variables.get(el.children[0].value)
def test(self,el):
if self.visit_children(el.children[0])[0]:
self.visit_children(el.children[1])
elif len(el.children) >= 3:
self.visit_children(el.children[2])
# Literals
string = lambda self, el: el.children[0][1:-1]
entier = lambda self, el: int(el.children[0])