Как символ '@' правильно маркируется в синтаксическом анализаторе языка Java?

Я работаю над анализатором исходного кода Java, следуя лексическим и синтаксическим спецификациям.

Я застрял на аннотации, хотя; соответствующие правила:

Annotation:
    @ QualifiedIdentifier [ ( [AnnotationElement] ) ]

AnnotationTypeDeclaration:
    @ interface Identifier AnnotationTypeBody

но я не вижу @ Символ упоминается в любом месте лексической спецификации. Какое правильное правило для токенизации @или где найти такое правило?

Я понимаю, что мог бы легко добавить определение токена для этого, и это может даже работать - иногда. Но я бы предпочел сделать это правильно в соответствии со спецификацией, если это возможно.

2 ответа

Решение

В 9.6. Типы аннотаций, он говорит:

Обратите внимание, что at-sign (@) и ключевое слово interface являются двумя разными токенами. Технически их можно разделить пробелами, но это не рекомендуется как вопрос стиля.

Вы правы в том смысле, что "@" не упоминается ни как оператор, ни как пунктуация в разделе "3. Лексическая структура" JLS.

Однако он используется как символ в JLS 9.6, а также в разделе "18. Собранный синтаксис", поэтому очевидно, что ваш лексер должен рассматривать его как единое целое.

Это всего лишь небольшая редакционная проблема, и она не должна вызывать у вас беспокойства при реализации синтаксического анализатора Java.

Другие вопросы по тегам