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)
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)
def p_exp_1(self, p): """exp : REAL""" p[0] = Nonterminal() p[0].type = "real" p[0].value = p[1]
def p_exp(self, p): """exp : INTEGER""" print("""exp -> INTEGER""") p[0] = Nonterminal() p[0].type = "int" p[0].value = p[1]