anchor.diff:  MAP          : 'map';
   
   // Special elements
  -IDENTIFIER      : [a-zA-Z_$] [a-zA-Z_$0-9]* ;
  +IDENTIFIER      : [a-zA-Z_$0-9] [a-zA-Z_$0-9]* ;
   NUMBER          : (DIGIT)+ ;
   fragment DIGIT  : '0'..'9' ;
   
  
positive.code: 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
  ;
  
negative.code:     List<String> indexes = new ArrayList();
    }
    :
      '(' ids_list[indexes] ')' { $language.setIndexes(indexes); }
    | /* empty */
  ;
  
  range_option returns [ClawRange r]
    @init{
      $r = new ClawRange();
    }
    :
      RANGE '(' induction=IDENTIFIER '=' lower=IDENTIFIER ',' upper=IDENTIFIER ')'
      {
        $r.setInductionVar($induction.text);
        $r.setLowerBound($lower.text);
        $r.setUpperBound($upper.text);
        $r.setStep(Constant.DEFAULT_STEP_VALUE);
      }
    | RANGE '(' induction=IDENTIFIER '=' lower=IDENTIFIER ',' upper=IDENTIFIER ',' step=IDENTIFIER ')'
      {
        $r.setInductionVar($induction.text);
        $r.setLowerBound($lower.text);
        $r.setUpperBound($upper.text);
        $r.setStep($step.text);
      }
  ;
  /*
  mapping_option:
  