示例#1
0
 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)
示例#2
0
 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)
示例#3
0
 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))
示例#4
0
 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))