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
Пример #2
0
    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;")
Пример #3
0
    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;')
Пример #4
0
    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")
Пример #5
0
    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;")
Пример #6
0
    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)