2013-08-04 50 views
-2

我想讀一個Java源文件然後找出它所有的Java關鍵字,標識符和運營商,以確定在Java代碼的Java關鍵字,運算符和評論。我試圖聲明數組中的所有關鍵字和運算符,然後檢查該TT_word是否包含它。但是我無法識別標識符,高度讚賞示例。如何使用流標記化

+0

發表您的代碼! –

+0

聽起來像你想寫一個Java詞法分析器。 –

+0

您將要編寫一個解析器/詞法分析器,或使用現有的解析器/詞法分析器。你[已發佈](http://stackoverflow.com/questions/17999979/how-to-write-a-java-program-to-identify-keywords-operators-and-identifiers-in-a)另一個類似的問題一天,所以這看起來非常像您正在使用的編譯器課程。因此,我懷疑你*不能*使用現有的,並且必須自己寫一個。這是你的功課,如果你不自己做,你就不會學到任何東西。也許你的課程期望你使用ANTLR,這對於這樣的班級來說很普遍?但只有你知道。 – jason

回答

1

您將需要查看一些詞法分析器或解析器解決方案。與一些已有的解決方案相比,自己寫這篇文章將會非常痛苦 - 如果您還想自己寫 - 請隨時發表評論,我會留下關於如何入門的詳細解答。不過,我會建議看看像ANTLR

+0

String [] keywordArray = {「this」,「protected」,「public」,「return」,「try」,「static」,「while」,「throw」,「throws」,「void」,「for」 , 「抽象」, 「新」, 「開關」, 「同步」, 「布爾」, 「破發」, 「字節」, 「案例」, 「捕捉」, 「炭」, 「類」, 「做」,」如果」, 「雙」, 「其他」, 「擴展」, 「最後」, 「終於」, 「浮動」, 「私人」, 「實施」, 「進口」, 「的instanceof」, 「INT」, 「短」 「長」, 「超級」}; String [] operatorArray = {「==」,「!=」,「=」,「+」,「 - 」,「/」,「%」,「*」,「++」,「 - 」 ,「>」,「>」,「> =」,「<」,「<=」,「&&」,「||」,「?:」,「〜」,「<<",">>」,「>>> 」, 「&」, 「^」, 「|」}; (關鍵字是:「+ st.sval +」在行號:「+ st.lineno());如果(關鍵字列表.contains(st.sval)){ – f1r3wall

+0

ase StreamTokenizer.TT_WORD: if } – f1r3wall

+0

如果你有更好的方法 - 我鼓勵你發佈你自己的答案@ f1r3wall –

1

用於編寫靜態代碼分析規則的PMD的功能與您需要的類似。 PMD也解析源代碼。

請下載源代碼並觀看。可能有用

http://pmd.sourceforge.net

+0

PMD *解析*? Lexes,也許吧。 –