def test_warnigs(self): from src.lexer import Token from src.sema_helper import warnings test_cur_tok_1 = Token("$var1_lvl_1", "identifier_variable", "8:24") test_cur_tok_2 = Token("$undefined_VAR", "identifier_variable", "8:24") tester_symbol_table = { "1:1": ["$var1_lvl_1:string_literal"], "1:2": ["$undefined_VAR:NULL"], } list_res = list() list_res.append( warnings(test_cur_tok_1, Token("", "", ""), tester_symbol_table, "1:1", None, "operator_multiplication")) list_res.append( warnings(test_cur_tok_1, Token("", "", ""), tester_symbol_table, "1:1", None, "operator_sum")) list_res.append( warnings(test_cur_tok_2, Token("", "", ""), tester_symbol_table, "1:2", None, "operator_multiplication")) self.assertEqual(list_res, [ 'Warning: A non-numeric value encountered in 8:24', None, 'NOTICE Undefined variable: $undefined_VAR on 8:24' ])
def test_change_type_main_var(self): from src.lexer import Token from src.sema_helper import change_type_main_var symbol_table = {"1:1": ["$var1_lvl_1:NULL"]} change_type_main_var(symbol_table, Token("$var1_lvl_1", "", ""), Token("str", "string_literal", ""), "1") self.assertEqual({"1:1": ["$var1_lvl_1:string_literal"]}, symbol_table)
def test_get_type_var(self): from src.lexer import Token from src.sema_helper import get_type_var symbol_table = {"1:1": ["$var1_lvl_1:NULL"]} list_res_expected = list() list_res_expected.append( get_type_var(symbol_table, Token("$var1_lvl_1", "identifier_variable", ""), "1:1", type_or_var='TYPE')) list_res_expected.append( get_type_var(symbol_table, Token("$var1_lvl_1", "identifier_variable", ""), "1:1", type_or_var='VAR')) self.assertEqual(['NULL', '$var1_lvl_1'], list_res_expected)
def test_find_var_above(self): from src.lexer import Token from src.sema_helper import find_var_above symbol_table = { "0:0": ["$var1_lvl_0:numeric_constant"], "1:1": ["$var1_lvl_1:string_literal"], "2:1": ["$var1_lvl_2:NULL", "$var4:NULL"] } list_res = list() list_res.append( find_var_above(symbol_table, Token("$var1_lvl_1", "identifier_variable", "8:24"), 1)) list_res.append( find_var_above( symbol_table, Token("$NonExistsVar", "identifier_variable", "8:24"), 1)) self.assertEqual([True, False], list_res)
def generateToken(self, LEXNAME): return Token(LEXNAME, "", self.makeNewPosition(self.getPrevToken()))
def create(): return Null(Token(LexName.NULL, None))
try: i = int(string) except ValueError: i = 0 return [LexName.INT,i] def f5(ob:list): string = ob[0] index = ob[1] try: char = string[index] except Exception: char = None return [LexName.STRING,char] t.addGlobalFunction(TFunction([LexName.NULL, False],Token.get(LexName.PRINT),"Global", [FnParameter(LexName.STRING, "ob")],f1)) t.addGlobalFunction(TFunction([LexName.STRING, False],Token.get(LexName.INPUT),"Global", [],f2)) t.addGlobalFunction(TFunction([LexName.STRING, False],"toStr","Global", [FnParameter(LexName.STRING, "ob")],f3)) t.addGlobalFunction(TFunction([LexName.INT, False],"toInt","Global", [FnParameter(LexName.STRING, "ob")],f4)) t.addGlobalFunction(TFunction([LexName.STRING, False],"charAt","Global", [FnParameter(LexName.STRING, "ob"),FnParameter(LexName.INT, "i")],f5)) t.parseRoot(root) print("\n\n") for k in t.getStatementsAsString(): print(k.__str__()) print("_________") ''' for k in TACgen.getTabbedStatements(t.getOrderedListOfStatements(t.rootLabel)): print(k.__str__()) ''' for label in t.scopes.keyOrder:
self.next_token() self.ignore = True return self.expression() elif self.token.token_type == TokenType.left_braces: self.body() else: self.error("identifier") def body(self): # print("body") if self.token.token_type == TokenType.left_braces: self.next_token() self.binding_list() if self.is_identifier("in"): self.next_token() self.expression() else: self.error("in") if self.token.token_type == TokenType.right_braces: self.next_token() else: self.error("}}") else: self.error("{{") if __name__ == "__main__": t = Token() p = Parser(t.lexer()) print(p.program())