parser: fix bug when expression begins by a variable

This commit is contained in:
Antoine Viallon 2023-05-10 01:38:49 +02:00
parent 5bf52edd44
commit 1f2a8460a8
Signed by: aviallon
GPG key ID: D126B13AB555E16F

View file

@ -40,12 +40,23 @@ class Parser:
return tok
return False
def peek(self, token_type) -> False | Token:
def peek(self, token_type: Tokens) -> False | Token:
tok = self.token
if self.token.kind == token_type:
return tok
return False
def peek_several(self, *tokens_types: Tokens) -> False | list[Token]:
if self.pos + len(tokens_types) >= len(self.tokens):
return False
toks = self.tokens[self.pos:self.pos + len(tokens_types)]
for i, token in enumerate(toks):
if token.kind != tokens_types[i]:
return False
return toks
@tracer.trace_method(level=LogLevel.Trace)
def expect(self, token_type: Tokens) -> Token:
r = self.accept(token_type)
@ -129,7 +140,7 @@ class Parser:
@tracer.trace_method
def expression(self) -> Value:
if self.peek(Tokens.Identifier):
if self.peek_several(Tokens.Identifier, Tokens.Equal):
return Expression(self.assignment())
else:
return Expression(self.summation())