anchor.diff:  RANGE        : 'range';
   
   // Special elements
  -IDENTIFIER      : [a-zA-Z_$0-9] [a-zA-Z_$0-9]* ;
  +IDENTIFIER      : [a-zA-Z_$] [a-zA-Z_$0-9]* ;
   NUMBER          : (DIGIT)+ ;
  -fragment DIGIT  : '0'..'9' ;
  +fragment DIGIT  : [0-9] ;
   
   // Skip whitspaces
   WHITESPACE   : ( '\t' | ' ' | '\r' | '\n'| '\u000C' )+ { skip(); };
positive.code:   | END REMOVE { $l.setDirective(ClawDirective.END_REMOVE); } EOF
  
    // Kcache directive
    | KCACHE offset_list[o]
      {
        $l.setDirective(ClawDirective.KCACHE);
        $l.setOffsets(o);
  
negative.code:     $r = new ClawRange();
    }
    :
      RANGE '(' induction=IDENTIFIER '=' lower=range_id ',' upper=range_id ')'
      {
        $r.setInductionVar($induction.text);
        $r.setLowerBound($lower.text);
        $r.setUpperBound($upper.text);
        $r.setStep(Constant.DEFAULT_STEP_VALUE);
      }
    | RANGE '(' induction=IDENTIFIER '=' lower=range_id ',' upper=range_id ',' step=range_id ')'
      {
        $r.setInductionVar($induction.text);
        $r.setLowerBound($lower.text);
        $r.setUpperBound($upper.text);
        $r.setStep($step.text);
      }
  ;
  
  range_id returns [String text]:
      n=NUMBER { $text = $n.text; }
    | i=IDENTIFIER { $text = $i.text; }
  ;
  
  
  