anchor.diff:      | ID '(' expression ')' { $code = "(" + $ID.text + " " + $expression.code + ")"; }
       ;
   
  -
   clojure_list returns [String code]
   @init{$code = "["; }
   @after{$code += "]"; }
  
positive.code:     | import_statement {$code = $import_statement.code; }
      ;
  
  
  import_statement returns [String code]
      : 'import ' PATH {$code = "(import '" + $PATH.text + ")";}
      ;
  
  
  expression returns [String code]
      : arithmetic_expression {$code = $arithmetic_expression.code; }
      ;
  
  
  /*
  arithmetic_expression returns [String code]
      : arithmetic_term_product {$code = $arithmetic_term_product.code;}
      | arithmetic_term_quotent {$code = $arithmetic_term_quotent.code;}
      ;
  
  arithmetic_term_product returns [String code]
  @init{$code = "(* "; }
  @after{$code += ")"; }
      : a=arithmetic_factor {$code += $a.code;} (MULT! b=arithmetic_factor {$code += " " + $b.code;})+
      ;
  
  arithmetic_term_quotent returns [String code]
  @init{$code = "(/ "; }
  @after{$code += ")"; }
      : a=arithmetic_factor {$code += $a.code;} (DIV! b=arithmetic_factor {$code += " " + $b.code;})+
      ;
  */
  
  arithmetic_expression returns [String code]
  @init{$code = ""; }
  
negative.code:     | function_call {$code = $function_call.code; }
      ;
  
  expression_list returns [List<String> code_list]
  @init{$code_list = new ArrayList<String>();}
      :  a=expression {$code_list.add($a.code);} (COMMA! b=expression { $code_list.add($b.code);})+
      ;
  
  val_assignment returns [String code]
      : 'val' ID '=' expression { $code = "(def " + $ID.text + " " + $expression.code + ")"; }
      ;
  
  function_def_params returns [List<String> code_list]
  @init{$code_list = new ArrayList<String>();}
  