From 22eb205cdfa17b0c23764e7373437093ea37631b Mon Sep 17 00:00:00 2001 From: Gary Gan Date: Wed, 11 Jun 2025 21:10:49 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0exp=E7=9A=8452=E8=A1=A8?= =?UTF-8?q?=E8=BE=BE=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- semantic/rule.py | 36 ++++++++++++++++++++++++++++++++++++ syntax/rule.py | 2 +- 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/semantic/rule.py b/semantic/rule.py index b42ef42..938aa3d 100644 --- a/semantic/rule.py +++ b/semantic/rule.py @@ -931,5 +931,41 @@ class LocalDefineFollow31E(SemanticRule): symbol_table_pool.global_var_table.append( GlobalVar(node.id, node.type, 4 * int(node.length)) ) + +class Exp52C0(SemanticRule): + def execute(self): + self.__rule(self.node) + + def __rule(self, node): + self.fun = node.parent.fun + +class Exp52C1(SemanticRule): + def execute(self): + self.__rule(self.node) + + def __rule(self, node): + self.fun = node.parent.fun + +class Exp52E(SemanticRule): + def execute(self): + self.__rule(self.node) + + def __rule(self, node): + node.bool = node.children[1].bool + if node.children[1].bool: + node.name_1 = get_temp_var_name() + node.name_2 = get_temp_var_name() + for c in node.children[0].code: + node.code.append(c) + for c in node.children[1].code: + node.code.append(c) + # (op, i1, i2, o1) + node.code.append("(" + node.children[1].op + " ,", + node.children[0].name + " ," + node.children[1].name + " ," + node.name_1 + ")") + # (=. i1, _, o1) + node.code.append("(=, " + node.name_1 + ", _," + node.name_2 + ")") + else: + node.name = node.children[0].name + for c in node.children[0].code: + node.code.append(c) diff --git a/syntax/rule.py b/syntax/rule.py index 87220af..cbacad1 100644 --- a/syntax/rule.py +++ b/syntax/rule.py @@ -555,7 +555,7 @@ productions = [ # ), # 52 Production('exp', ['additive-expr', 'exp-follow'], - None, ['exp0C0', 'exp0C1'], 'exp0E'), + None, ['Exp52C0', 'Exp52C1'], 'Exp52E'), # # 53 # Production('exp-follow', ['rel-op', 'additive-expr'], # None, [None, 'expFollow0C1'], 'expFollow0E'),