This commit is contained in:
2024-02-22 10:37:18 +01:00
parent cee71787f4
commit f394a9cde2
6 changed files with 60 additions and 39 deletions

View File

@ -37,17 +37,21 @@ class Parser():
def statement_skip(tokens):
return ast_nodes.StatementSkip()
@self.pg.production('statement : KEYWORD_SET expression SYMBOL_SET ID')
def statement_set(tokens):
return ast_nodes.StatementSet(tokens[1], tokens[3].value)
@self.pg.production('statement : KEYWORD_MAYBE statement')
def statement_maybe(tokens):
return ast_nodes.Maybe(tokens[1])
@self.pg.production('statement : KEYWORD_DO command')
def statement_do(tokens):
return ast_nodes.Do(tokens[1])
@self.pg.production('statement : KEYWORD_MAYBE statement')
def statement_maybe(tokens):
return ast_nodes.Maybe(tokens[1])
@self.pg.production('statement : SYMBOL_LBRACKET statements SYMBOL_RBRACKET')
def statement_scope(tokens):
return ast_nodes.Scope(tokens[1])
@self.pg.production('statement : KEYWORD_SET expression SYMBOL_SET ID')
def statement_set(tokens):
return ast_nodes.StatementSet(tokens[1], tokens[3].value)
@self.pg.production('statement : KEYWORD_DEFINE ID SYMBOL_LT DATA_INT SYMBOL_GT KEYWORD_AS statement', precedence="KEYWORD_DEFINE")
def statement_define(tokens):
@ -57,19 +61,7 @@ class Parser():
def statement_return(tokens):
return ast_nodes.StatementReturn(tokens[1])
@self.pg.production('statement : SYMBOL_LBRACKET statements SYMBOL_RBRACKET')
def statement_scope(tokens):
return ast_nodes.Scope(tokens[1])
## command ##
@self.pg.production('command : BUILTIN SYMBOL_LT expressions SYMBOL_GT')
def command_builtin(tokens):
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):
return ast_nodes.Call(tokens[1].value,tokens[4])
@self.pg.production('command : statement KEYWORD_IF expression')
def command_if(tokens):
return ast_nodes.CommandIf(tokens[0], tokens[2])
@ -86,6 +78,14 @@ class Parser():
def command_until(tokens):
return ast_nodes.CommandUntil(tokens[0],tokens[2])
@self.pg.production('command : BUILTIN SYMBOL_LT expressions SYMBOL_GT')
def command_builtin(tokens):
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):
return ast_nodes.Call(tokens[1].value,tokens[4])
## expressions ##
@self.pg.production('expressions : ')
def expressions_none(_):
@ -96,29 +96,31 @@ class Parser():
return [tokens[0]] + tokens[2]
## expression ##
@self.pg.production('expression : DATA_STRING')
def exp_string(tokens):
return ast_nodes.ExpString(tokens[0].value[1:-1])
@self.pg.production('expression : DATA_INT')
def exp_int(tokens):
return ast_nodes.ExpInt(int(tokens[0].value))
@self.pg.production('expression : SYMBOL_LPARENS expression SYMBOL_RPARENS')
def exp_paren(tokens):
return tokens[1]
@self.pg.production('expression : DATA_FLOAT')
def exp_float(tokens):
return ast_nodes.ExpInt(float(tokens[0].value))
@self.pg.production('expression : DATA_STRING')
def exp_string(tokens):
return ast_nodes.ExpString(tokens[0].value[1:-1])
# Boolean
@self.pg.production('expression : statement', precedence="KEYWORD_IF")
def exp_statement(tokens):
return(tokens[0])
@self.pg.production('expression : SYMBOL_LCURL expressions SYMBOL_RCURL')
def exp_list(tokens):
return ast_nodes.ExpList(tokens[1])
@self.pg.production('expression : KEYWORD_VARIABLE ID')
def exp_variable(tokens):
return ast_nodes.ExpVariable(tokens[1].value)
@self.pg.production('expression : expression SYMBOL_LCURL expression SYMBOL_RCURL')
def exp_index(tokens):
return ast_nodes.ExpIndex(tokens[0],tokens[2])
@self.pg.production('expression : SYMBOL_LPARENS expression SYMBOL_RPARENS')
def exp_paren(tokens):
return tokens[1]
@self.pg.production('expression : expression SYMBOL_PLUS expression')
@self.pg.production('expression : expression SYMBOL_MINUS expression')
@ -139,17 +141,17 @@ class Parser():
def exp_not(tokens):
pass
@self.pg.production('expression : KEYWORD_VARIABLE ID')
def exp_variable(tokens):
return ast_nodes.ExpVariable(tokens[1].value)
@self.pg.production('expression : KEYWORD_ARGUMENT ARG')
def exp_arg(tokens):
return ast_nodes.ExpArg(int(tokens[1].value[1:]))
@self.pg.production('expression : SYMBOL_LCURL expressions SYMBOL_RCURL')
def exp_list(tokens):
return ast_nodes.ExpList(tokens[1])
@self.pg.production('expression : expression SYMBOL_LCURL expression SYMBOL_RCURL')
def exp_index(tokens):
return ast_nodes.ExpIndex(tokens[0],tokens[2])
@self.pg.production('expression : statement')
def exp_statement(tokens):
return(tokens[0])
## Error Handling ##
@self.pg.error