Пример #1
0
    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'
        ])
Пример #2
0
    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)
Пример #3
0
 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)
Пример #4
0
    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)
Пример #5
0
 def generateToken(self, LEXNAME):
     return Token(LEXNAME, "", self.makeNewPosition(self.getPrevToken()))
Пример #6
0
 def create():
     return Null(Token(LexName.NULL, None))
Пример #7
0
    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:
Пример #8
0
            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())