anchor.diff:      mapping_option
     | mapping_option map_list
   ;
  -
  +*/
   
   /*----------------------------------------------------------------------------
    * LEXER RULES
  
positive.code:   | /* empty */
  ;
  
  range_option:
      RANGE '(' induction=IDENTIFIER '=' ',' lower=IDENTIFIER ',' upper=IDENTIFIER ')'
    | RANGE '(' induction=IDENTIFIER '=' ',' lower=IDENTIFIER ',' upper=IDENTIFIER ',' step=IDENTIFIER ')'
  ;
  
  mapping_option:
      MAP '(' ids_list ':' ids_list ')'
  ;
  
negative.code: ;
  
  
  ids_list[List<String> ids]
    :
      i=IDENTIFIER { $ids.add($i.text); }
    | i=IDENTIFIER { $ids.add($i.text); } ',' ids_list[$ids]
  ;
  
  
  directive[ClawLanguage language]:
      LFUSION { $language.setDirective(ClawDirective.LOOP_FUSION); } group_option[$language] EOF
    | LINTERCHANGE { $language.setDirective(ClawDirective.LOOP_INTERCHANGE); } indexes_option[$language] EOF
    | LEXTRACT { $language.setDirective(ClawDirective.LOOP_EXTRACT); } range_option EOF
    | REMOVE { $language.setDirective(ClawDirective.REMOVE); } EOF
    | END REMOVE { $language.setDirective(ClawDirective.END_REMOVE); } EOF
  ;
  
  group_option[ClawLanguage language]:
  