Exemplo n.º 1
0
 def __rule(self, node):
     if symbol_table_pool.query(node.fun).exist(node.id):
         if node.children[0].type == 'var':
             node.name = node.id
         if node.children[0].type == 'array':
             node.name = get_temp_var_name()
             for c in node.children[0].code:
                 node.code.append(c)
             node.code.append(node.name + ' := ' + node.id + '[' +
                              node.children[0].name + ']')
     else:
         self.errors.append('变量' + node.id + '未定义')
Exemplo n.º 2
0
 def __rule(self, node):
     if node.children[1].mul:
         node.name = 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)
         node.code.append(node.name + ' := ' + node.children[0].name + ' ' +
                          node.children[1].op + ' ' + node.children[1].name)
     else:
         node.name = node.children[0].name
         for c in node.children[0].code:
             node.code.append(c)
Exemplo n.º 3
0
 def __rule(self, node):
     if symbol_table_pool.fun_table.exist(node.id):
         if node.children[1].num != symbol_table_pool.query(
                 node.id).get_params_num():
             self.errors.append('调用函数' + node.id + '的时候参数数量不匹配')
         else:
             for c in node.children[1].code:
                 node.code.append(c)
             node.code.append(
                 'call ' + node.id + ', ' +
                 str(symbol_table_pool.query(node.fun).get_params_num()))
             node.name = get_temp_var_name()
             node.code.append(node.name + ' := ' + 'result')
     else:
         self.errors.append('函数' + node.id + '未定义')
Exemplo n.º 4
0
 def __rule(self, node):
     node.name = get_temp_var_name()
     node.code.append(node.name + ' := ' + node.children[0].lexical)