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 tok
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def peek(self, token_type) -> False | Token:
|
def peek(self, token_type: Tokens) -> False | Token:
|
||||||
tok = self.token
|
tok = self.token
|
||||||
if self.token.kind == token_type:
|
if self.token.kind == token_type:
|
||||||
return tok
|
return tok
|
||||||
return False
|
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)
|
@tracer.trace_method(level=LogLevel.Trace)
|
||||||
def expect(self, token_type: Tokens) -> Token:
|
def expect(self, token_type: Tokens) -> Token:
|
||||||
r = self.accept(token_type)
|
r = self.accept(token_type)
|
||||||
|
|
@ -129,7 +140,7 @@ class Parser:
|
||||||
|
|
||||||
@tracer.trace_method
|
@tracer.trace_method
|
||||||
def expression(self) -> Value:
|
def expression(self) -> Value:
|
||||||
if self.peek(Tokens.Identifier):
|
if self.peek_several(Tokens.Identifier, Tokens.Equal):
|
||||||
return Expression(self.assignment())
|
return Expression(self.assignment())
|
||||||
else:
|
else:
|
||||||
return Expression(self.summation())
|
return Expression(self.summation())
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue