anchor.diff:      { $l.setDirective(ClawDirective.LOOP_FUSION); }
   
     // loop-interchange directive
  -  | LOOP_INTERCHANGE indexes_option[$l] parallel_clause_optional[$l] acc_optional[$l] EOF
  +  | LOOP_INTERCHANGE indexes_option[$l] loop_interchange_clauses[$l] EOF
       { $l.setDirective(ClawDirective.LOOP_INTERCHANGE); }
   
     // loop-extract directive
  -  | LOOP_EXTRACT range_option mapping_option_list[m] fusion_clause_optional[$l] parallel_clause_optional[$l] acc_optional[$l] EOF
  +  | LOOP_EXTRACT range_option mapping_option_list[m] loop_extract_clauses[$l] EOF
       {
         $l.setDirective(ClawDirective.LOOP_EXTRACT);
         $l.setRange($range_option.r);
  
positive.code:     }
  
    // Kcache directive
    | KCACHE data_clause[$l] offset_list_optional[i] private_optional[$l] EOF
      {
        $l.setDirective(ClawDirective.KCACHE);
        $l.setOffsets(i);
      }
    | KCACHE data_clause[$l] offset_list_optional[i] INIT private_optional[$l] EOF
      {
        $l.setDirective(ClawDirective.KCACHE);
        $l.setOffsets(i);
        $l.setInitClause();
      }
  
    // 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
      {
  
negative.code: ;
  
  // fusion clause
  fusion_clause[ClawLanguage l]:
      FUSION (group_clause[$l])? { $l.setFusionClause(); }
  ;
  
  // parallel clause
  parallel_clause[ClawLanguage l]:
      PARALLEL { $l.setParallelClause(); }
  ;
  
  // acc clause
  acc_clause[ClawLanguage l]
    @init{
      List<String> tempAcc = new ArrayList<>();
    }
    :
      ACC '(' identifiers[tempAcc] ')' { $l.setAcceleratorClauses(Utility.join(" ", tempAcc)); }
  ;
  
  // interchange clause
  interchange_clause[ClawLanguage l]:
      INTERCHANGE indexes_option[$l] { $l.setInterchangeClause(); }
  ;
  
  // induction clause
  induction_clause[ClawLanguage l]
    @init{
      List<String> temp = new ArrayList<>();
    }
    :
      INDUCTION '(' ids_list[temp] ')' { $l.setInductionClause(temp); }
  ;
  
  // data clause
  