diff --git a/compiler/parser.py b/compiler/parser.py index 1be6096..62077d1 100644 --- a/compiler/parser.py +++ b/compiler/parser.py @@ -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())