anchor.diff:      : LCLETTER (LCLETTER | UCLETTER | DIGIT|'_')*
       ;
   
  -MFNAME: UCLETTER (LCLETTER | UCLETTER | DIGIT|'_')*
  +MFNAME
  +    : UCLETTER (LCLETTER | UCLETTER | DIGIT|'_')*
       ;
   
   WS :  (' '|'\t'|'\f')+ -> channel(HIDDEN)
  
positive.code: 
  fragment LCLETTER : 'a'..'z';
  fragment UCLETTER : 'A'..'Z';
  fragment DIGIT : '0'..'9';
negative.code: grammar Shiro;
  
  shiro : includeStmt*
          shiroStmt*
          EOF
  	  ;
  
  includeStmt: INCLUDE STRING_LITERAL NEWLINE;
  
  shiroStmt
      :
          anonymousGraphStmt
          | nodeDecl
          | graphDecl
          | stateDecl
          | NEWLINE
  	;
  
  stateDecl
      :   STATE stateName BEGIN NEWLINE
          stateStmt*
          END
      ;
  
  stateName
      :   IDENT
      ;
  
  stateStmt
      :   stateGraphSelection
      |   stateActivation
      |   nestedStateActivation
      |   NEWLINE
      ;
  
  stateGraphSelection
      :   GRAPH (IDENT | DEFAULT)
      ;
  
  nestedStateActivation
      :   stateActivation BEGIN NEWLINE
          (stateActivation
          | nestedStateActivation
          | NEWLINE)*
          END
      ;
  
  stateActivation
  