anchor.diff:  }
   @after {
     self.print_newline()
  -} : ^(EvalExpr expr { self.print_line($expr.val) })
  +} : ^(EvalExpr expr)
     | ^(Block statement+)
     | if_statement
     | while_statement
  
positive.code:     })
    | ^(Post voc=variable_or_call incdec_op
      {
        $val = self.gen_temp()
        self.print_line('\%s = \%s[0]' \% ($val, $voc.tmp))
        self.print_line('\%s[0] = \%s[0] \%s 1' \% ($voc.tmp, 
                          $voc.tmp, $incdec_op.op))
  
negative.code:   ;
  
  variable_or_call returns [tmp]
    : ^(Call name=ID apl=actual_parameter_list 
        { indices = [] } (index { indices.append($index.idx) })* 
      {
        $tmp = self.get_temp()
        index_list = ','.join(('[0][\%s]' \% x) for x in indices)
        self.print_line('\%s = \%s(\%s)\%s' \% ($tmp, $name.text, 
                              $apl.params_list, index_list))
      })
    | ^(Variable variable_name
        { indices = [] } (index { indices.append($index.idx) })*)
      {
        index_list = ','.join(('[0][\%s]' \% x) for x in indices)
        $tmp = $variable_name.tmp + index_list
      }
    | ^(OBJ_ACCESS variable_or_call variable_or_call)
    ;
  
  actual_parameter_list returns [params_list]
    : { params = [] } (^(Parameter expr { params.append($expr.val) }))+
      { $params_list = ','.join(params) }
    ;
  
  index returns [idx]
    : ^(Index ArrayEnd { $idx = '-1' })
    | ^(Index expr { $idx = $expr.val })
    ;
  
  variable_name returns [tmp]
    : ^(DOLLAR ID 
      { 
        $tmp = '\%s\%s' \% (self.TEMP_PREFIX, $ID.text)
        self.print_line('try: \%s = \%s\%s' \% ($tmp, self.VAR_PREFIX, $ID.text))
        self.print_line('except NameError: \%s = \%s\%s = [None]' \% ($tmp, 
                          self.VAR_PREFIX, $ID.text))
      })
    | ^(DOLLAR variable_name)
    | ^(DOLLAR expr)
  