Exemplo n.º 1
0
    def generate_boolean_code(self, p, code_list):
        p[0] = Nonterminal()
        next_quad = len(code_list)
        p[0].true_list = [next_quad]
        p[0].false_list = [next_quad + 1]

        if p[1].place != "" and p[3].place != "":
            code = "L" + str(next_quad) + ": " + "if " + p[1].place + p[2] + p[
                3].place + " goto _" + ";"
        elif p[1].place != "" and p[3].place == "":
            code = "L" + str(next_quad) + ": " + "if " + p[1].place + p[2] + p[
                3].value + " goto _" + ";"
        elif p[1].place == "" and p[3].place != "":
            code = "L" + str(next_quad) + ": " + "if " + p[1].value + p[2] + p[
                3].place + " goto _" + ";"
        else:
            code = "L" + str(next_quad) + ": " + "if " + p[1].value + p[2] + p[
                3].value + " goto _" + ";"

        code_list.append(code)

        code = "L" + str(next_quad + 1) + ": " + 'goto _' + ";"
        code_list.append(code)

        p[0].m = next_quad + 2
        p[0].code = code_list
        p[0].type = "bool"

        print("comparison_operation -> exp " + p[2] + " exp")
        print(code_list)
Exemplo n.º 2
0
 def p_exp_2(self, p):
     """exp : TRUE"""
     p[0] = Nonterminal()
     p[0].type = "bool"
     next_quad = len(self.code_list)
     p[0].true_list = [next_quad]
     p[0].m = next_quad + 1
     code = "L" + str(next_quad) + ": " + "goto _" + ";"
     self.code_list.append(code)
Exemplo n.º 3
0
 def p_exp_1(self, p):
     """exp : REAL"""
     p[0] = Nonterminal()
     p[0].type = "real"
     p[0].value = p[1]
Exemplo n.º 4
0
 def p_exp(self, p):
     """exp : INTEGER"""
     print("""exp -> INTEGER""")
     p[0] = Nonterminal()
     p[0].type = "int"
     p[0].value = p[1]