Ejemplo n.º 1
0
def three_operation_code(p, cl):
    p[0] = NoneTerminal(p)
    reg = Register('real')
    p[0].place = reg.place
    temp1 = ''
    if p[2].place != '':
        temp1 = p[2].place
    else:
        temp1 = p[2].value
    # p[0].code = p[1].code + p[3].code +  p[0].place + " = " + p[1].value + " " + p[2] + " " + p[3].value() + ";\n"
    p[0].code = p[0].place + " = " + p[1] + temp1 +  ";"
    # if p[2].value!='':
    #     if p[1] == '~':
    #         p[0].value = str(~ int(p[2].value))
    #     elif p[1] == '-':
    #         p[0].value = str(- int(p[2].value))
    #     elif p[1] == '!':
    #         p2 = int(p[2].value)
    #         if p2 != 0:
    #             p[0].value = str(0)
    #         else:
    #             p[0].value = str(random.randint(1,30))
    #     print('++++')
    #     # print(p[0].value)
    cl.append(p[0].code)
Ejemplo n.º 2
0
 def p_exp_false(self, p):
     'exp : TOKEN_FALSE'
     p[0] = NoneTerminal(p)
     p[0].type = 'bool'
     # next_quad = len(self.codes)
     # p[0].true_list = [next_quad]
     # p[0].m = next_quad + 1
     # code = "L" + str(next_quad) + ": " + "goto _" + ";"
     # self.codes.append(code)
     p[0].value = p[1]
     print('exp : TOKEN_FALSE')
Ejemplo n.º 3
0
 def p_exp_int(self, p):  #handled
     'exp : TOKEN_INTEGER'
     p[0] = NoneTerminal(p)
     p[0].type = 'int'
     p[0].value = str(p[1])
     # p[0].code = p[1]
     print()
     print('====int====')
     print(p[0].type)
     print(p[0].value)
     print('===========')
     print()
     print('exp : TOKEN_INTEGER')
Ejemplo n.º 4
0
    def p_item1(self, p):  #handled
        'item1 : TOKEN_ID TOKEN_ASSIGNMENT exp'
        p[0] = NoneTerminal(p)
        # p[0].label = p[1]
        # p[0].value = p[3].value
        # p[0].place = p[3].place
        # p[0].type = p[3].type
        p[0].code = p[1] + " = " + p[3].get_value()
        p[0].vars = [p[1]]
        # p[0].code = p[3].label + ' = ' + p[0].get_value() + ';'
        self.codes.append(p[0].code)
        print('p0 code')
        print(p[0].code)
        self.symbol_table.append([p[0].label, p[0].value])

        print('item1 -> TOKEN_ID TOKEN_ASSIGNMENT exp')
Ejemplo n.º 5
0
    def p_logical_operation_and(self, p):
        'logical_operation : exp TOKEN_AND exp'
        p[0] = NoneTerminal(p)
        true_label = Label()
        print(p[1].code)
        print('=====+')
        self.back_patch_true(p[1], true_label)
        p[0].code = p[
            1].code + true_label.label + ": // logical calculation (AND)\n " + p[
                3].code

        # m = p[1].m
        # self.backpatch(p[1].true_list, m)
        # p[0].false_list = p[1].false_list + p[3].false_list
        # p[0].true_list = p[3].true_list

        print('logical_operation : exp TOKEN_AND exp')
Ejemplo n.º 6
0
def four_boolean_code(p,cl):
    p[0] = NoneTerminal(p)
    reg = Register('real')
    p[0].place = reg.place
    temp1 = ''
    temp2 = ''
    print('this p1')
    print(p[1])
    if p[1].place != '':
        temp1 = p[1].place
    else:
        temp1 = p[1].value
    if p[3].place != '':
        temp2 = p[3].place
    else:
        temp2 = p[3].value
    # p[0].code = p[1].code + p[3].code +  p[0].place + " = " + p[1].value + " " + p[2] + " " + p[3].value() + ";\n"
    p[0].code = 'L' + str(len(cl)) + ': ' + p[0].place + " = " + temp1 + " " + p[2] + " " + temp2 + ";"
Ejemplo n.º 7
0
def four_operation_code(p, cl):
    p[0] = NoneTerminal(p)
    reg = Register('real')
    p[0].place = reg.place
    temp1 = ''
    temp2 = ''
    print('this p1')
    print(p[1].get_value())
    temp1 = p[1].get_value()
    temp2 = p[3].get_value()
    # p[0].code = p[1].code + p[3].code +  p[0].place + " = " + p[1].value + " " + p[2] + " " + p[3].value() + ";\n"
    p[0].code =  p[0].place + " = " + temp1 + " " + p[2] + " " + temp2 + ";"
    # if p[3].value!='' and p[1].value!='':
    #     if p[2] == '*':
    #         print('sss')
    #         print(int(p[1].value) * int(p[3].value))
    #         p[0].value = str(int(p[1].value) * int(p[3].value))
    #     elif p[2] == '+':
    #         p[0].value = str(int(p[1].value) + int(p[3].value))
    #     elif p[2] == '-':
    #         p[0].value = str(int(p[1].value) - int(p[3].value))
    #     elif p[2] == '/':
    #         p[0].value = str(int(p[1].value) / int(p[3].value))
    #     elif p[2] == '%':
    #         p[0].value = str(int(p[1].value) % int(p[3].value))
    #     elif p[2] == '^':
    #         p[0].value = str(int(p[1].value) ** int(p[3].value))
    #     elif p[2] == '|':
    #         p[0].value = str(int(p[1].value) | int(p[3].value))
    #     elif p[2] == '&':
    #         p[0].value = str(int(p[1].value) & int(p[3].value))
    #     elif p[2] == '<<':
    #         p[0].value = str(int(p[1].value) << int(p[3].value))
    #     elif p[2] == '>>':
    #         p[0].value = str(int(p[1].value) >> int(p[3].value))

    cl.append(p[0].code)
Ejemplo n.º 8
0
 def p_if_type1(self, p):
     'if : TOKEN_IF TOKEN_LP exp TOKEN_RP block %prec TOKEN_IF'
     print('if : TOKEN_IF TOKEN_LP exp TOKEN_RP block %prec TOKEN_IF')
     print()
     print("if ps")
     global VARIABLES
     p[0] = NoneTerminal(p)
     print(p[0].value)
     print(p[1])
     print(p[2])
     print(p[3])
     print(p[4])
     print(p[5])
     print()
     print()
Ejemplo n.º 9
0
 def p_assignment(self, p):
     'assignment : lvalue TOKEN_ASSIGNMENT exp TOKEN_SEMICOLON'
     p[0] = NoneTerminal(p)
     if p[3].place != '':
         p[0].code = p[1].value + " = " + p[3].place + ";"
         p[0].address = len(self.codes)
         self.codes.append(p[0].code)
         p[0].code = p[3].code + p[0].code
     elif p[3].value != '':
         p[0].code = p[1].value + " = " + p[3].value + ";"
     print(self.codes)
     print('assignment : lvalue TOKEN_ASSIGNMENT exp TOKEN_SEMICOLON')
Ejemplo n.º 10
0
 def p_return_type_bool(self, p):
     'return_type : TOKEN_BOOL_TYPE'
     p[0] = NoneTerminal(p)
     p[0].type = 'bool'
     print('return_type : TOKEN_BOOL_TYPE')
Ejemplo n.º 11
0
 def p_exp_logical_op(self, p):
     'exp : logical_operation'
     p[0] = NoneTerminal(p)
     p[0].code = p[1].code
     p[0].place = p[1].get_value()
     print('exp : logical_operation')
Ejemplo n.º 12
0
 def p_exp_string(self, p):
     'exp : TOKEN_STRING'
     p[0] = NoneTerminal(p)
     p[0].type = 'bool'
     p[0].value = '"' + p[1] + '"'
     print('exp : TOKEN_STRING')
Ejemplo n.º 13
0
 def p_lvalue_id(self, p):
     'lvalue1 : TOKEN_ID'
     p[0] = NoneTerminal(p)
     p[0].value = p[1]
     print('lvalue : TOKEN_ID')
Ejemplo n.º 14
0
 def p_program(self, p):
     'program : macros classes'
     p[0] = NoneTerminal(p)
     print('program : macros classes')
Ejemplo n.º 15
0
 def p_var_list_item_id(self, p):
     'var_list_item : TOKEN_ID'
     p[0] = NoneTerminal(p)
     p[0].label = p[1]
     print('var_list_item -> TOKEN_ID')
Ejemplo n.º 16
0
 def p_exp_real(self, p):
     'exp : TOKEN_REAL'
     p[0] = NoneTerminal(p)
     p[0].type = 'real'
     p[0].value = str(p[1])
     print('exp : TOKEN_REAL')
Ejemplo n.º 17
0
 def p_var_list_comma(self, p):
     'var_list : var_list TOKEN_COMMA var_list_item'
     p[0] = NoneTerminal(p)
     print('var_list : var_list TOKEN_COMMA var_list_item')