2012-11-16 71 views
3

我正在研究Java源代碼解析器,遵循lexicalsyntactic規範。如何在Java語言分析器中正確標記「@」符號?

雖然我被困在註釋上,相關的規則是:

Annotation: 
    @ QualifiedIdentifier [ ([AnnotationElement]) ] 

AnnotationTypeDeclaration: 
    @ interface Identifier AnnotationTypeBody 

,但我沒有看到在詞彙規範的任何地方提到@符號。標記化@的正確規則是什麼,或者我在哪裏可以找到這樣的規則?

我意識到我可以很容易地爲此添加令牌定義,甚至可能有效。但如果可能的話,我寧願按照規範正確地做。

+0

有趣!這些規則意味着'@ SomeAnnotation public @ interface Foo {}'是有效的,事實上編譯器似乎沒有抱怨添加的空白。所以它看起來像'@'被看作是一個單獨的標記(甚至是'儘管它通常是格式化的,它與下一個標記之間沒有空格)。 –

回答

5

9.6. Annotation Types,它說:

。注意,在符號(@)和關鍵字接口是兩個不同的令牌。從技術上講,可以用空格將它們分開,但這是一種風格問題,不鼓勵。

+0

正是我在找的,謝謝。顯而易見的方式 - 只是'@'的新標記是否是實現此標記的正確方法? –

+0

@MattFenwick,是的,這是正確的。 –

1

你是正確的,在「@」沒有提到任何一個運營商或爲JLS的「3詞法結構」一節中標點符號的意義。

但是,它用作JLS 9.6中的符號,也是「18.收集的語法」部分,所以顯而易見的是,您的詞法分析器應該將它作爲一個對待。

這只是一個小小的編輯問題,而不是在實現Java解析器時引起任何問題。