def translate_while(cls, node): go_line = cls.lineCount + 1 false_go = Quaternion(Quaternion.GO, cls.translate_exp(node.get_left())) cls.codes.append(false_go) cls.lineCount += 1 cls.codes.append(Quaternion(Quaternion.IN)) cls.lineCount += 1 cls.scope_level += 1 cls.translate_switch(node.get_middle()) cls.symbol_table.pop(cls.scope_level) cls.scope_level -= 1 cls.codes.append(Quaternion(Quaternion.OUT)) cls.lineCount += 1 cls.codes.append(Quaternion(Quaternion.GO, None, None, go_line)) cls.lineCount += 1 false_go.set_forth(cls.lineCount + 1)
def translate_if(cls, node): false_go = Quaternion(Quaternion.GO, cls.translate_exp(node.get_left())) cls.codes.append(false_go) cls.lineCount += 1 cls.codes.append(Quaternion(Quaternion.IN)) # 进入语句块 cls.lineCount += 1 # 代码层级加一 cls.scope_level += 1 # 处理这一层级 cls.translate_switch(node.get_middle()) # 清除局部变量 cls.symbol_table.pop(cls.scope_level) # 代码层级恢复 cls.scope_level -= 1 cls.codes.append(Quaternion(Quaternion.OUT)) cls.lineCount += 1 # 判断else部分子节点是否存在 if node.get_right() is not None: out_go = Quaternion(Quaternion.GO) cls.codes.append(out_go) cls.lineCount += 1 false_go.set_forth(str(cls.lineCount+1)) cls.codes.append(Quaternion(Quaternion.IN)) cls.lineCount += 1 cls.scope_level += 1 cls.translate_switch(node.get_right()) cls.symbol_table.pop(cls.scope_level) cls.scope_level -= 1 cls.codes.append(Quaternion(Quaternion.OUT)) cls.lineCount += 1 out_go.set_forth(str(cls.lineCount+1)) else: false_go.set_forth(str(cls.lineCount+1))
def translate_if(cls, node): false_go = Quaternion(Quaternion.GO, cls.translate_exp(node.get_left())) cls.codes.append(false_go) cls.lineCount += 1 cls.codes.append(Quaternion(Quaternion.IN)) # 进入语句块 cls.lineCount += 1 # 代码层级加一 cls.scope_level += 1 # 处理这一层级 cls.translate_switch(node.get_middle()) # 清除局部变量 cls.symbol_table.pop(cls.scope_level) # 代码层级恢复 cls.scope_level -= 1 cls.codes.append(Quaternion(Quaternion.OUT)) cls.lineCount += 1 # 判断else部分子节点是否存在 if node.get_right() is not None: out_go = Quaternion(Quaternion.GO) cls.codes.append(out_go) cls.lineCount += 1 false_go.set_forth(str(cls.lineCount + 1)) cls.codes.append(Quaternion(Quaternion.IN)) cls.lineCount += 1 cls.scope_level += 1 cls.translate_switch(node.get_right()) cls.symbol_table.pop(cls.scope_level) cls.scope_level -= 1 cls.codes.append(Quaternion(Quaternion.OUT)) cls.lineCount += 1 out_go.set_forth(str(cls.lineCount + 1)) else: false_go.set_forth(str(cls.lineCount + 1))