def _parse_function_parameters(self) -> List[Identifier]: params: List[Identifier] = [] assert self._peek_token is not None if self._peek_token.token_type == TokenType.RPAREN: self._advance_tokens() return params self._advance_tokens() assert self._current_token is not None identifier = Identifier(token=self._current_token, value=self._current_token.literal) params.append(identifier) while self._peek_token.token_type == TokenType.COMMA: self._advance_tokens() self._advance_tokens() identifier = Identifier(token=self._current_token, value=self._current_token.literal) params.append(identifier) if not self._expected_token(TokenType.RPAREN): return [] return params
def test_let_statement(self) -> None: program: Program = Program(statements=[ LetStatement(token=Token(TokenType.LET, literal="variable"), name=Identifier(token=Token(TokenType.IDENT, literal="mi_var"), value="mi_var"), value=Identifier(token=Token(TokenType.IDENT, literal="otra_variable"), value="otra_variable")) ]) program_str = str(program) self.assertEquals(program_str, "variable mi_var = otra_variable;")
def test_let_statements(self) -> None: program: Program = Program(statements=[ LetStatement( token = Token(TokenType.LET, literal='variable', line=1), name = Identifier(token = Token(TokenType.IDENT, literal = 'mi_var', line=1), value = 'mi_var' ), value = Identifier(token = Token(TokenType.IDENT, literal = 'otra_variable', line=1), value = 'otra_var') ) ] ) program_str = str(program) print(program_str) self.assertEquals(program_str, 'variable mi_var = otra_var;')
def test_expression_statement(self) -> None: program: Program = Program(statements=[ ExpressionStatement(token=Token(TokenType.IDENT, literal="foobar"), expression=Identifier(token=Token( TokenType.IDENT, literal="foobar"), value="foobar")), ExpressionStatement(token=Token(TokenType.INT, literal="5"), expression=Identifier(token=Token( TokenType.INT, literal="5"), value="5")) ]) program_str = str(program) self.assertEquals(program_str, "foobar5")
def test_return_statement(self) -> None: program: Program = Program(statements=[ ReturnStatement(token=Token(TokenType.RETURN, literal="regresa"), return_value=Identifier(token=Token( TokenType.IDENT, literal="mi_var"), value="mi_var")) ]) program_str = str(program) self.assertEquals(program_str, "regresa mi_var;")
def test_return_statement(self) -> None: program: Program = Program( statements=[ ReturnStatement( token = Token(TokenType.RETURN, literal='regresa', line=1), return_value = Identifier( Token(TokenType.IDENT, literal = 'otra_variable',line=1), value = '5' ) ) ] ) program_str = str(program) self.assertEquals(program_str, 'regresa 5;')
def _parse_identifier(self) -> Identifier: assert self._current_token is not None return Identifier(token=self._current_token, value=self._current_token.literal)