anchor.diff:      |   EscapeSequence
       ;
   
  +/* Droplet: we parse all directives as if they were comments,
  +   distinguishing between them later in parseComment. */
   Directive
       :   '#' [^\r\n]*? ~[\r\n]*
           -> skip
  
positive.code:     :   'struct'
      |   'union'
      ;
  
  
  structDeclarationsBlock
      :   '{' structDeclarationList '}'
  
negative.code:     |   declarationList declaration
      ;
  
  /* Droplet: ANTLR has trouble parsing a string when a rule doesn't
     contain an EOF token at the end of it. To do live reparsing, we
     have to define new duplicate rules for each intermediate node plus EOF
     so that we can parse small parts of the program independently.
    */
  primaryExpression_DropletFile
      :   Identifier EOF
      |   Constant EOF
  