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 parse_program(self) -> Program: program: Program = Program(statements=[]) assert self._current_token is not None while self._current_token.token_type != TokenType.EOF: statement = self._parse_statement() if statement is not None: program.statements.append(statement) self._advance_tokens() return program
def test_integer_expressions(self) -> None: program: Program = Program(statements=[ ExpressionStatement( token=Token(TokenType.INT, literal='5'), expression=Integer( token=Token(TokenType.INT, literal='5'), value=5 ) ), ]) program_str = str(program) self.assertEquals(program_str, '5')
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', 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;')