ANTLR

Infobox software | name = ANTLR | logo = | screenshot = | caption = | author = 與其他參與者 | developer = | released = 1992年2月 | latest release version = 4.7.1 / 3.5.2 | latest release date = / | programming language = Java | operating system = | platform = Cross-platform | language = | status = in active development | genre = | license = BSD License | website = ANTLR （ 全名 ： ANother Tool for Language Recognition ） 是基於LL 算法實現的語法解析器生成器 （ parser generator ） ， 用Java語言編寫 ， 使用自上而下 （ top - down ） 的遞歸下降LL剖析器方法 。 由舊金山大學的Terence Parr博士等人於1989年開始發展 。 ANTLR最初叫做PCCTS ， Purdue Compiler Construction Tool Set ， 是Terence Parr在普渡大學攻讀碩士學位時的創作 ， 在Hank Dietz教授的指導下 ， 開始研究構造自動化的分析器 。 1993年 ， Parr取得博士學位 ， 並於同年發佈ANTLR 1.10 版 。 最早的ANTLR只支持Java, 直到ANTLR 3以後開始支持Ada95 、 C 、 C ＃ 、 JavaScript 、 Objective - C 、 Perl 、 Python 、 Ruby 、 C++ 和Standard ML 。 如同一般的詞法分析器 （ lexer ） 和語法分析器 （ parser ） ， ANTLR可以用來產生樹狀分析器 （ tree parsers ） 。 ANTLR 文法定義使用類似EBNF （ Extended Backus - Naur Form ） 的定義方式 ， 形象十分簡潔直觀 。 例如: ANTLR用A: a; 來表示規則 ， 舊式的方法則是以 A = > a 表示 ， 所以ANTLR是以 “: ” 代替了 “ = > ” 。 ANTLR的規則要以分號 “; ” 結束 。 又如其他ANTLR符號 “ | ” 代表 “ 或 ” 的關係 ， 又如 “ * ， + ” 表示可以出現0次或多次 。 ANTLR本身使用switch - case來匹配token ， 形成記號序列記號流 ， 舊式的Yacc則利用符號表 （ parser table ） 。 ANTLR是完全exception - driven ， LL ( k ) 語法比目前流行的LR剖析器 ( 包含SLR, LALR等 ） 強大 ， 更可以避免LR剖析器既有的位移 - 歸約 （ shift - reduce ） 或歸約 - 歸約 （ reduce - reduce ） 之類的語法衝突 ， 產生的代碼清楚易懂 ， 便於程序員閱讀和理解 。 同時更支持Unicode 。