anchor.diff:     ;
   
   elementNoOptionSpec
  -   : id ('=' | '+=') atom (ebnfSuffix)
  -   | id ('=' | '+=') block (ebnfSuffix)
  -   | atom (ebnfSuffix)
  +   : id ('=' | '+=') atom (ebnfSuffix?)
  +   | id ('=' | '+=') block (ebnfSuffix?)
  +   | atom (ebnfSuffix?)
      | ebnf
      | ACTION
      | SEMPRED ('=>')
  
positive.code:    ;
  
  block
     : '(' ((optionsSpec)? ':')? alternative rewrite ('|' alternative rewrite)* ')'
     ;
  
  altList
  
negative.code:    ;
  
  
  
  OPTIONS
     : 'options' WS_LOOP '{'
     ;
  
  
  TOKENS
     : 'tokens' WS_LOOP '{'
     ;
  
  
  fragment SRC
     : 'src' ' ' ACTION_STRING_LITERAL ' ' INT
     ;
  
  fragment WS_LOOP
     : (WS | SL_COMMENT | ML_COMMENT)*
     ;
  
  
  DOC_COMMENT
     : 'DOC_COMMENT'
     ;
  
  
  PARSER
     : 'PARSER'
     ;
  
  
  LEXER
     : 'LEXER'
     ;
  
  
  RULE
     : 'RULE'
     ;
  
  
  BLOCK
     : 'BLOCK'
     ;
  
  
  OPTIONAL
     : 'OPTIONAL'
     ;
  
  
  CLOSURE
     : 'CLOSURE'
     ;
  
  
  POSITIVE_CLOSURE
     : 'POSITIVE_CLOSURE'
     ;
  
  
  SYNPRED
     : 'SYNPRED'
     ;
  
  
  RANGE
     : 'RANGE'
     ;
  
  
  CHAR_RANGE
     : 'CHAR_RANGE'
     ;
  
  
  EPSILON
     : 'EPSILON'
     ;
  
  
  ALT
     : 'ALT'
     ;
  
  
  EOR
     : 'EOR'
     ;
  
  
  EOB
     : 'EOB'
     ;
  
  
  EOA
     : 'EOA'
     ;
  
  // end of alt
  
  ID
     : 'ID'
     ;
  
  
  ARG
     : 'ARG'
     ;
  
  
  ARGLIST
     : 'ARGLIST'
     ;
  
  
  RET
     : 'RET'
     ;
  
  
  LEXER_GRAMMAR
     : 'LEXER_GRAMMAR'
     ;
  
  
  PARSER_GRAMMAR
     : 'PARSER_GRAMMAR'
     ;
  
  
  TREE_GRAMMAR
     : 'TREE_GRAMMAR'
     ;
  
  
  COMBINED_GRAMMAR
     : 'COMBINED_GRAMMAR'
     ;
  
  
  INITACTION
     : 'INITACTION'
     ;
  
  
  LABEL
     : 'LABEL'
     ;
  
  
  TEMPLATE
     : 'TEMPLATE'
     ;
  
  
  SCOPE
     : 'scope'
     ;
  
  SEMPRED
     : 'SEMPRED'
     ;
  
  
  GATED_SEMPRED
     : 'GATED_SEMPRED'
     ;
  
  
  SYN_SEMPRED
     : 'SYN_SEMPRED'
     ;
  
  
  BACKTRACK_SEMPRED
     : 'BACKTRACK_SEMPRED'
     ;
  
  
  FRAGMENT
     : 'fragment'
     ;
  
  
  TREE_BEGIN
     : '^('
     ;
  
  
  ROOT
     : '^'
     ;
  
  
  BANG
     : '!'
     ;
  
  
  RANGE2
     : '..'
     ;
  
  
  REWRITE
     : '->'
     ;
  
  
  SL_COMMENT
     : '//' ~[\r\n]* -> skip
     ;
  
  
  ML_COMMENT
     : '/*' .*? '*/' -> skip
     ;
  
  WS
     : (' ' | '\t' | '\r'? '\n') + -> skip
     ;
  
  TOKEN_REF
     : 'A' .. 'Z' ('a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9')*
     ;
  
  RULE_REF
     : 'a' .. 'z' ('a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9')*
     ;
  