parser: fix bug when expression begins by a variable
This commit is contained in:
parent
5bf52edd44
commit
1f2a8460a8
1 changed files with 13 additions and 2 deletions
|
|
@ -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())
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue