Грамматика для аннотаций Java - PullRequest
2 голосов
/ 22 марта 2010

Существует ли BNF или EBNF, который описывает грамматику для аннотаций Java?

Ответы [ 3 ]

4 голосов
/ 22 марта 2010

Официальным источником грамматики, связанной с Java, является, конечно, JLS.

JLS 18.1 Грамматика языка программирования Java

Annotations:
        Annotation [Annotations]

Annotation:
        @ TypeName [( [Identifier =] ElementValue)]

ElementValue:
        ConditionalExpression
        Annotation
        ElementValueArrayInitializer

... rest ommitted
1 голос
/ 22 марта 2010

грамматика языка Java

  1. Любой тип может иметь префикс [Annotations]:

    Type: [Annotations] Identifier [TypeArguments] {. Identifier [TypeArguments]} {[]} [Annotations] BasicType

  2. Кразрешить аннотации на уровнях массива (в объявлениях, а не в конструкторах), измените «{[]}» на «{[Annotations] []}».(Это было выделено как «BracketsOpt» во 2-м издании JLS [GJSB00].) Например:

Type: [Annotations] Identifier [TypeArguments]{ . Identifier [TypeArguments]} {[Annotations] []} [Annotations] BasicType

Also permit annotations on varargs (...): FormalParameterDeclsRest: VariableDeclaratorId [, FormalParameterDecls] [Annotations] ... VariableDeclaratorId

Аннотации могут появиться на типе приемника, изменив использование «FormalParameters» (во всех 5 местах, которые появляются в грамматике) на «FormalParameters [Annotations]».Например:

VoidMethodDeclaratorRest: FormalParameters [Annotations] [throws QualifiedIdentifierList] ( MethodBody | ; )

1 голос
/ 22 марта 2010

`/ * Синтаксис аннотации следующий.* /

Аннотация :: = NormalAnnotation |SingleMemberAnnotation |MarkerAnnotation NormalAnnotation :: = "@" Name "(" (MemberValuePairs)? ")" MarkerAnnotation :: = "@" Name SingleMemberAnnotation :: = "@" Name "(" MemberValue ")" MemberValuePairs :: = MemberValuePair (","MemberValuePair) * MemberValuePair :: =" = "MemberValue MemberValue :: = Аннотация |MemberValueArrayInitializer |ConditionalExpression MemberValueArrayInitializer :: = "{" (MemberValue ("," MemberValue) * (",")?)?"}"

/ * Типы аннотаций.* /

AnnotationTypeDeclaration :: = "@" "interface" AnnotationTypeBody AnnotationTypeBody :: = "{" (AnnotationTypeMemberDeclaration) * "}" AnnotationTypeMemberDeclaration :: = Модификаторы (Тип "(" "))" По умолчанию";" | ClassOrInterfaceDeclaration | EnumDeclaration | AnnotationTypeDeclaration | FieldDeclaration) |(";") DefaultValue :: = "default" MemberValue` отсюда .Также см. Его сообщение в блоге .

...