This commit is contained in:
2024-02-21 14:01:22 +01:00
parent e8dfb94860
commit b6949f6a73
22 changed files with 88 additions and 43 deletions

View File

@ -9,9 +9,9 @@ class Parser():
[i[0] for i in ALL_TOKENS],
precedence=[
('left', ["KEYWORD_MAYBE", "KEYWORD_RETURN"]),
('left', ["KEYWORD_IF", "KEYWORD_UNTIL", "KEYWORD_DEFINE", "KEYWORD_AS"]),
('left', ["KEYWORD_DO", "BUILTIN"]),
('left', ["SYMBOL_EQUALS", "SYMBOL_SET"]),
('left', ["KEYWORD_IF", "KEYWORD_BECAUSE", "KEYWORD_UNTIL", "KEYWORD_DEFINE", "KEYWORD_AS"]),
('left', ["KEYWORD_DO", "BUILTIN", "SYMBOL_SET"]),
('left', ["SYMBOL_EQUALS"]),
('left', ["SYMBOL_PLUS", "SYMBOL_MINUS"]),
('left', ["SYMBOL_TIMES", "SYMBOL_DIVIDE", "SYMBOL_LT","SYMBOL_GT"])
]
@ -33,7 +33,7 @@ class Parser():
return [tokens[0]] + tokens[2]
## statement ##
@self.pg.production('statement : SYMBOL_DOLLAR expression SYMBOL_SET ID', precedence="SYMBOL_SET")
@self.pg.production('statement : KEYWORD_SET expression SYMBOL_SET ID', precedence="SYMBOL_SET")
def statement_set(tokens):
return ast_nodes.StatementSet(tokens[1], tokens[3].value)
@ -49,6 +49,10 @@ class Parser():
def statement_if(tokens):
return ast_nodes.StatementIf(tokens[0], tokens[2])
@self.pg.production('statement : statement KEYWORD_BECAUSE expression')
def statement_because(tokens):
return ast_nodes.StatementBecause(tokens[0], tokens[2])
@self.pg.production('statement : KEYWORD_UNTIL expression statement')
def statement_until(tokens):
return ast_nodes.StatementUntil(tokens[2],tokens[1])
@ -68,7 +72,7 @@ class Parser():
## command ##
@self.pg.production('command : BUILTIN SYMBOL_LT expressions SYMBOL_GT')
def command_builtin(tokens):
return ast_nodes.Builtin(tokens[0].value, tokens[2])
return ast_nodes.Builtin(tokens[0], tokens[2])
@self.pg.production('command : SYMBOL_QUOTE ID SYMBOL_QUOTE SYMBOL_LT expressions SYMBOL_GT')
def command_call(tokens):
@ -89,7 +93,7 @@ class Parser():
return ast_nodes.ExpInt(int(tokens[0].value))
@self.pg.production('expression : DATA_FLOAT')
def exp_int(tokens):
def exp_float(tokens):
return ast_nodes.ExpInt(float(tokens[0].value))
@self.pg.production('expression : DATA_STRING')