javacc

javacc

javaCC 是一個能生成語法和詞法分析器的生成程序。語法和詞法分析器字元串處理軟體的重要組件。編譯器和解釋器集成了詞法和語法分析器來解釋那些含有程序的文件,其中詞法和語法分析器被廣泛用於各種應用,是用以首先定義用戶將要使用的語言,然後用該定義解析相應的條目並且對各種後端資料庫制定正確的查詢的一種方法。

簡介


JavaCC(Java Compiler Compiler)是一個用JAVA開發的受歡迎的語法分析生成器。這個分析生成器工具可以讀取上下文無關且有著特殊意義的語法並把它轉換成可以識別且匹配該語法的JAVA程序。JavaCC可以在Java虛擬機(JVM) V1.2或更高的版本上使用,它是100%的純Java代碼,可以在多種平台上運行,與Sun當時推出Java的口號"Write Once Run Anywhere"相一致。JavaCC還提供JJTree工具來幫助我們建立語法樹,JJDoc工具為我們的源文件生成BNF範式(巴科斯-諾爾範式)文檔(Html)

具體特點


下面是JavaCC的一些具體特點:
1. TOP-DOWN:JavaCC產生自頂向下的語法分析器,而YACC等工具則產生的是自底向上的語法分析器。採用自頂向下的分析方法允許更通用的語法(但是包含左遞歸的語法除外)。自頂向下的語法分析器還有其他的一些優點,比如:易於調試,可以分析語法中的任何非終結符,可以在語法分析的過程中在語法分析樹中上下傳值等。
2. LARGE USER COMMUNTIY:是一個用JAVA開發的最受歡迎的語法分析生成器。擁有成百上千的下載量和不計其數的使用者。
3. LEXICAL AND GRAMMAR SPECIFICATIONS IN ONE FILE:詞法規範(如正則表達式、字元串等)和語法規範(BNF範式)書寫在同一個文件里。這使得語法易讀和易維護。
4. TREE BUILDING PREPROCESSOR: JavaCC提供的JJTree工具,是一個強有力的語法樹構造的預處理程序。
5. EXTREMELY CUSTOMIZABLE:JavaCC提供了多種不同的選項供用戶自定義JavaCC的行為和它所產生的語法分析器的行為。
6. CERTIFIED TO BE 100% PURE JAVA:JavaCC可以在任何java平台V1.1以後的版本上運行。它可以不需要特別的移植工作便可在多種機器上運行。是Java語言”Write Once, Run Everywhere”特性的證明。
7. DOCUMENT GENERATION:JavaCC包括一個叫JJDoc的工具,它可以把文法文件轉換成文本本件(Html).
8. MANY MANY EXAMPLES:JavaCC的發行版包括一系列的包括Java和HTML文法的例子。這些例子和相應的文檔是學習JavaCC的捷徑。
9. INTERNATIONALIZED:JavaCC的詞法分析器可以處理全部的Unicode輸入,並且詞法規範何以包括任意的Unicode字元。這使得語言元素的描述,例如Java標識符變得容易。
10. SYNTACTIC AND SEMANTIC LOOKAHEAD SPECIFICATIONS:默認的,JavaCC產生的是LL(1)的語法分析器,然而有許多語法不是LL(1)的。JavaCC提供了根據語法和語義向前看的能力來解決在一些局部的移進-歸約的二義性。例如,一個LL(k)的語法分析器只在這些有移進-歸約衝突的地方保持LL(k),而在其他地方為了更好的效率而保持LL(1)。移進-歸約和歸約-歸約衝突不是自頂向下語法分析器的問題。
11. PERMITS EXTENDED BNF SPECIFICATIONS:JavaCC允許拓展的BNF範式——例如(A)*,(A)+等。拓展的BNF範式在某種程度上解決了左遞歸。事實上,拓展的BNF範式寫成A ::= y(x)* 或 A ::= Ax|y更容易閱讀。
12. LEXICAL STATES AND LEXICAL ACTIONS:JavaCC提供了像lex的詞法狀態和詞法動作的能力。
13. CASE-INSENSITIVE LEXICAL ANALYSIS:詞法描述可以在整個詞法描述的全局域或者獨立的詞法描述中定義大小寫不敏感的Tokens。
14. EXTENSIVE DEBUGGING CAPABILITIES:使用選項DEBUG_PARSER, DEBUG_LOOKAHEAD, 和 DEBUG_TOKEN_MANAGER,使用者可以在語法分析和Token處理中使用深層次的分析。
15. SPECIAL TOKENS:Tokens可以在詞法說明中被定義成特殊的Tokens從而在語法分析的過程中被忽略,但這些Tokens可以通過工具進行處理。
16. VERY GOOD ERROR REPORTING:JavaCC的錯誤提示在眾多語法分析生成器中是最好的。JavaCC產生的語法分析器可以清楚的指出語法分析的錯誤並提供完整的診斷信息。