Compare commits

..

No commits in common. "1a181095c6150c93902b9b1787a192425b77eb9d" and "76e2707156290971929331ca4207697576bd6024" have entirely different histories.

3 changed files with 8 additions and 33 deletions

View File

@ -1,6 +0,0 @@
texte name = "Anthony";
si name ne vaut pas "Anthony" alors {
afficher "C'est pas moi";
} sinon {
afficher "C'est moi";
}

View File

@ -35,7 +35,6 @@ operator: expressionleft SAME_OP expression -> equal
| NEG_OP expression -> neg
// string/list -> string/list
| SIZE_OP expression -> sizeof
| expressionleft "[" expression "]" -> list_get
?type: BOOL_TYPE
| INT_TYPE
@ -46,8 +45,8 @@ declaration: type VARIABLE (EQUAL_SIGN expression)?
assignation: VARIABLE EQUAL_SIGN expression
loop: "tant" "que" expression "faire" "{" instruction_seq "}" -> while_loop
| "pour" "chaque" type VARIABLE "dans" expression "faire" "{" instruction_seq "}" -> for_loop
loop: "tant" "que" expression "faire" "{" (instruction)* "}" -> while_loop
| "pour" "chaque" type VARIABLE "dans" expression "faire" "{" (instruction)* "}" -> for_loop
?literal: ENTIER -> entier
| booleen
@ -60,8 +59,7 @@ range: "[" expression? ":" expression? "]"
controls: test
| loop
test: "si" expression "alors" "{" instruction_seq "}" ("sinon" "{" instruction_seq "}")?
instruction_seq: (instruction*)
test: "si" expression "alors" "{" instruction* "}" ("sinon" "{" instruction* "}")?
?booleen: TRUE_KW -> true
| FALSE_KW -> false

27
spf.py
View File

@ -15,19 +15,13 @@ class SPFInterpreter(lark.visitors.Interpreter):
self.variables = Variables(trace)
def while_loop(self, el):
while self.visit_children(el.children[0])[0]:
self.visit_children(el.children[1])
print("TODO: while")
cond = el.children[0]
instr = el.children[1:]
print(cond.pretty())
def for_loop(self, el):
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
print("TODO: for")
def afficher(self, el):
ligne = ""
@ -109,10 +103,6 @@ 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]
@ -123,13 +113,6 @@ 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])