anchor.diff:    | KW_TRUE { $val = "True" }
     | KW_FALSE { $val = "False" }
     | ^(KW_NEW class_name actual_parameter_list?)
  -  | voc=variable_or_call { $val = '\%s[0]' \% $voc.tmp }
  -  | ^(Pre voc=variable_or_call incdec_op
  -    {
  -      self.print_line('\%s[0] = \%s[0] \%s 1' \% ($voc.tmp, 
  -                        $voc.tmp, $incdec_op.op))
  -      $val = '\%s[0]' \% $voc.tmp
  -    })
     | ^(Post voc=variable_or_call incdec_op
       {
         $val = self.get_temp()
  
positive.code:   ;
  
  actual_parameter_list returns [params_list]
    // TODO: actually push references to parameters
    : { params = [] } (^(Parameter expr { params.append($expr.val) }))+
      { $params_list = ','.join(params) }
    ;
  
  index[vector] returns [idx]
  
negative.code:   | ^(IS_GE e1=expr e2=expr { $val = '(\%s >= \%s)' \% ($e1.val, $e2.val) })
    | ^(IS_LT e1=expr e2=expr { $val = '(\%s < \%s)' \% ($e1.val, $e2.val) })
    | ^(IS_GT e1=expr e2=expr { $val = '(\%s > \%s)' \% ($e1.val, $e2.val) })
    | ^(SHL e1=expr e2=expr { $val = '(\%s << \%s)' \% ($e1.val, $e2.val) })
    | ^(SHR e1=expr e2=expr { $val = '(\%s >> \%s)' \% ($e1.val, $e2.val) })
    | ^(PLUS e1=expr e2=expr  { $val = '(\%s + \%s)' \% ($e1.val, $e2.val) })
    | ^(MINUS e1=expr e2=expr { $val = '(\%s - \%s)' \% ($e1.val, $e2.val) })
    | ^(DOT e1=expr e2=expr { $val = '(str(\%s) + str(\%s))' \% ($e1.val, $e2.val) })
  