anchor.diff:          }
       ;
   
  -val_assignment returns [String code]
  -@init{
  -    String annotation = "";
  -}
  -@after {
  -    $code = annotation + $code;
  -}
  -    : VAL name=ID
  -      (COLON type=type_annotation {annotation = "(t/ann " + $name.text + " " + $type.code +  ")\n";})?
  -      '=' expression { $code = "(def " + $name.text + " " + $expression.code + ")"; }
  -    ;
   
   
   let_statement returns [String code]
  
positive.code: // A file is a list of statements
  // followed by an EOF
  source_code returns [List<String> code_list]
  @init{$code_list = new ArrayList<String>();}
      : statement_list {for (String str: $statement_list.code_list) { $code_list.add(str); }} EOF
      ;
  
  /** Parser Rules **/
  
  
  statement_list returns [List<String> code_list]
  @init{$code_list = new ArrayList<String>();}
      : ( statement_term {$code_list.add($statement_term.code);} )* (WS)?
      ;
  
  // A statement_term is a statement followed
  
negative.code: 
  statement returns [String code]
      : val_assignment {$code = $val_assignment.code; }
      | expression {$code = $expression.code; }
      ;
  
  val_assignment returns [String code]
  @init{
      String annotation = "";
  }
  @after {
      $code = annotation + $code;
  }
      : VAL name=ID
        (COLON type=type_annotation {annotation = "(t/ann " + $name.text + " " + $type.code +  ")\n";})?
        '=' expression { $code = "(def " + $name.text + " " + $expression.code + ")"; }
      ;
  
  
  expression returns [String code]
      : comparison_expression {$code = $comparison_expression.code; }
  