예제 #1
0
    def __init__(self, path):
        archive = open(path, 'r').read()

        lex = Lexer(archive)
        tokens = lex.tokenize()
        parser = Parser(tokens)

        parser.parse()
예제 #2
0
 def Test_number(self):
     l = Lexer()
     caso1 = False
     for token in l.tokenize("10"):
         if token.type == "NUMBER":
             caso1 = True
     self.assertAlmostEqual(caso1, True)
     self.assertAlmostEqual(False, True)
예제 #3
0
파일: test.py 프로젝트: jekozyra/lexer
    def test_should_properly_tokenize_a_full_method_definition(self):
        lexer = Lexer('func add(a: Int, b: Int): Int = {\n' +
            '   a + b\n' +
            '}')

        tokens = lexer.tokenize();

        self.assertEqual(21, len(tokens))

        self.assertEqual(tokens[0].type, TokenType.FUNC)

        self.assertEqual(tokens[1].type, TokenType.IDENTIFIER)
        self.assertEqual(tokens[1].value, 'add')

        self.assertEqual(tokens[2].type, TokenType.LEFT_PAREN)

        self.assertEqual(tokens[3].type, TokenType.IDENTIFIER)
        self.assertEqual(tokens[3].value, 'a')

        self.assertEqual(tokens[4].type, TokenType.COLON)

        self.assertEqual(tokens[5].type, TokenType.IDENTIFIER)
        self.assertEqual(tokens[5].value, 'Int')

        self.assertEqual(tokens[6].type, TokenType.COMMA)

        self.assertEqual(tokens[7].type, TokenType.IDENTIFIER)
        self.assertEqual(tokens[7].value, 'b')

        self.assertEqual(tokens[8].type, TokenType.COLON)

        self.assertEqual(tokens[9].type, TokenType.IDENTIFIER)
        self.assertEqual(tokens[9].value, 'Int')

        self.assertEqual(tokens[10].type, TokenType.RIGHT_PAREN)

        self.assertEqual(tokens[11].type, TokenType.COLON)

        self.assertEqual(tokens[12].type, TokenType.IDENTIFIER)
        self.assertEqual(tokens[12].value, 'Int')

        self.assertEqual(tokens[13].type, TokenType.EQUAL)

        self.assertEqual(tokens[14].type, TokenType.LEFT_BRACE)

        self.assertEqual(tokens[15].type, TokenType.NEWLINE)

        self.assertEqual(tokens[16].type, TokenType.IDENTIFIER)
        self.assertEqual(tokens[16].value, 'a')

        self.assertEqual(tokens[17].type, TokenType.PLUS)

        self.assertEqual(tokens[18].type, TokenType.IDENTIFIER)
        self.assertEqual(tokens[18].value, 'b')

        self.assertEqual(tokens[19].type, TokenType.NEWLINE)

        self.assertEqual(tokens[20].type, TokenType.RIGHT_BRACE)
예제 #4
0
파일: test.py 프로젝트: jekozyra/lexer
    def test_should_tokenize_a_simple_expression(self):
        lexer = Lexer('42 + 21')

        tokens = lexer.tokenize()

        self.assertEqual(3, len(tokens))

        self.assertEqual(tokens[0].type, TokenType.INTEGER)
        self.assertEqual(tokens[0].value, '42')

        self.assertEqual(tokens[1].type, TokenType.PLUS)
        self.assertEqual(tokens[1].value, '+')

        self.assertEqual(tokens[2].type, TokenType.INTEGER)
        self.assertEqual(tokens[2].value, '21')
예제 #5
0
파일: test.py 프로젝트: jekozyra/lexer
    def test_should_assign_the_correct_line_and_column_numbers(self):
        lexer = Lexer('func equals(a: Int, b: Int): Boolean = {\n' +
            '   a == b\n' +
            '}')

        tokens = lexer.tokenize()

        self.assertEqual(0, tokens[0].line)
        self.assertEqual(0, tokens[0].column)

        self.assertEqual(0, tokens[1].line)
        self.assertEqual(5, tokens[1].column)

        self.assertEqual(0, tokens[2].line)
        self.assertEqual(11, tokens[2].column)

        self.assertEqual(0, tokens[3].line)
        self.assertEqual(12, tokens[3].column)

        self.assertEqual(0, tokens[4].line)
        self.assertEqual(13, tokens[4].column)

        self.assertEqual(0, tokens[5].line)
        self.assertEqual(15, tokens[5].column)

        self.assertEqual(0, tokens[6].line)
        self.assertEqual(18, tokens[6].column)

        self.assertEqual(0, tokens[7].line)
        self.assertEqual(20, tokens[7].column)

        self.assertEqual(0, tokens[8].line)
        self.assertEqual(21, tokens[8].column)

        self.assertEqual(0, tokens[9].line)
        self.assertEqual(23, tokens[9].column)

        self.assertEqual(0, tokens[10].line)
        self.assertEqual(26, tokens[10].column)

        self.assertEqual(0, tokens[11].line)
        self.assertEqual(27, tokens[11].column)

        self.assertEqual(0, tokens[12].line)
        self.assertEqual(29, tokens[12].column)

        self.assertEqual(0, tokens[13].line)
        self.assertEqual(37, tokens[13].column)

        self.assertEqual(0, tokens[14].line)
        self.assertEqual(39, tokens[14].column)

        self.assertEqual(0, tokens[15].line)
        self.assertEqual(40, tokens[15].column)

        self.assertEqual(1, tokens[16].line)
        self.assertEqual(3, tokens[16].column)

        self.assertEqual(1, tokens[17].line)
        self.assertEqual(5, tokens[17].column)

        self.assertEqual(1, tokens[18].line)
        self.assertEqual(8, tokens[18].column)

        self.assertEqual(1, tokens[19].line)
        self.assertEqual(9, tokens[19].column)

        self.assertEqual(2, tokens[20].line)
        self.assertEqual(0, tokens[20].column)