anchor.diff:  ;
   
   // collapse clause
  -collapse_optional[ClawLanguage l]:
  +collapse_clause_optional[ClawLanguage l]:
       COLLAPSE '(' n=NUMBER ')'
       { $l.setCollapseClause($n.text); }
     | /* empty */
   ;
   
   // fusion clause
  -fusion_optional[ClawLanguage l]:
  +fusion_clause_optional[ClawLanguage l]:
       FUSION group_clause_optional[$l] { $l.setFusionClause(); }
     | /* empty */
   ;
   
   // parallel clause
  -parallel_optional[ClawLanguage l]:
  +parallel_clause_optional[ClawLanguage l]:
       PARALLEL { $l.setParallelClause(); }
     | /* empty */
   ;
  
positive.code:   :
  
    // loop-fusion directive
      LOOPFUSION group_clause_optional[$l] collapse_optional[$l] EOF
      { $l.setDirective(ClawDirective.LOOP_FUSION); }
  
    // loop-interchange directive
    | LOOPINTERCHANGE indexes_option[$l] parallel_optional[$l] acc_optional[$l] EOF
      { $l.setDirective(ClawDirective.LOOP_INTERCHANGE); }
  
    // loop-extract directive
    | LOOPEXTRACT range_option mapping_option_list[m] fusion_optional[$l] parallel_optional[$l] acc_optional[$l] EOF
      {
        $l.setDirective(ClawDirective.LOOP_EXTRACT);
        $l.setRange($range_option.r);
  
negative.code:     }
  
    // Array notation transformation directive
    | ARRAY_TRANS induction_optional[$l] fusion_clause_optional[$l] parallel_clause_optional[$l] acc_optional[$l] EOF
      {  $l.setDirective(ClawDirective.ARRAY_TRANSFORM); }
    | END ARRAY_TRANS
      {
  