anchor.diff:  
   lexerAlt
      : lexerElements lexerCommands?
  -   | // empty alt
  +   |
  +   // explicitly allow empty alts
      ;
   
   lexerElements
      : lexerElement+
  -   | // empty alt
  +   |
      ;
   
   lexerElement
  
positive.code: 
  // -------------
  // Grammar Block
  
  block
     : LPAREN (optionsSpec? ruleAction* COLON)? altList RPAREN
     ;
  
  // ----------------
  // Parser rule ref
  
  ruleref
     : RULE_REF argActionBlock? elementOptions?
     ;
  
  // ---------------
  // Character Range
  
  characterRange
     : STRING_LITERAL RANGE STRING_LITERAL
     ;
  
negative.code:    : LOCALS argActionBlock
     ;
  
  /** Match stuff like @init {int i;} */
  ruleAction
     : AT identifier actionBlock
     ;
  
  ruleModifiers
     : ruleModifier+
     ;
     // An individual access modifier for a rule. The 'fragment' modifier
     // is an internal indication for lexer rules that they do not match
     // from the input but are like subroutines for other lexer rules to
     // reuse for certain lexical patterns. The other modifiers are passed
     // to the code generation templates and may be ignored by the template
     // if they are of no use in that language.
  
  ruleModifier
     : PUBLIC
  