def __init__(self, path): archive = open(path, 'r').read() lex = Lexer(archive) tokens = lex.tokenize() parser = Parser(tokens) parser.parse()
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)
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)
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')
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)