Search code examples
javaparsingtokengrammar

How is the '@' symbol correctly tokenized in a Java language parser?


I'm working on a Java source code parser, following the lexical and syntactic specifications.

I'm stuck on annotations, though; the relevant rules are:

Annotation:
    @ QualifiedIdentifier [ ( [AnnotationElement] ) ]

AnnotationTypeDeclaration:
    @ interface Identifier AnnotationTypeBody

but I don't see the @ symbol mentioned anywhere in the lexical spec. What is the correct rule for tokenizing @, or where can I find such a rule?

I realize that I could easily add a token definition for this, and it might even work --- sometimes. But I'd prefer to do it correctly according to the spec if possible.


Solution

  • In 9.6. Annotation Types , it says:

    Note that the at-sign (@) and the keyword interface are two distinct tokens. Technically it is possible to separate them with whitespace, but this is discouraged as a matter of style.