必威电竞|足球世界杯竞猜平台

antlr
來源:互聯網

antlr—Another Tool for Language Recognition,其前身是PCCTS,它為包括Java,C++,C#在內的語言提供了一個通過語法描述來自動構造自定義語言的識別器(recognizer),編譯器(parser)和解釋器(translator)的框架。

發展歷程

ANTLR是由Terence Parr博士等人于1989年開始發展的,最初命名為PCCTS(Purdue 編譯器 Construction Tool Set)。Terence Parr在普渡大學攻讀碩士學位時開始研究構造自動化的分析器,并在1993年取得博士學位,同年發布了ANTLR 1.10版。ANTLR最早只支持Java語言,直到ANTLR 3版本以后,才開始支持多種編程語言,包括Ada95、C、C#、ECMAScript、Objective-C、Perl、Python、RubyC++和Standard ML。

軟件簡介

開源語法分析器--ANTLR

1.1 flex詞法分析器(Lexer)... 1-1

1.2 語法分析器(Parser)... 1-1

1.3 ANTLR... 1-2

2.1 安裝及使用... 2-2

2.2 ANTLR語法文件解析... 2-3

2.3 ANTLR規則(RULE)解析... 2-4

4.1 ANTLR Studio插件的安裝... 4-7

4.2 功能簡介

1 ANTLR簡介

ANTLR可以通過斷言(Predicate)解決識別沖突;支持動作(Action)和返回值(Return Value)來;更棒的是,它可以根據輸入自動生成語法樹并可視化的顯示出來(這一點我將在下面的例子中演示)。由此,計算機語言的翻譯變成了一項普通的任務—在這之前Yacc/LEX顯得過于學院派,而以LL(k)為基礎的ANTLR雖然在效率上還略有不足,但是經過近些年來的升級修改,使得ANTLR足以應付現存的絕大多數應用。感謝Terence parr博士和他的同事們十幾年來的出色工作,他們為編譯理論的基礎和語言工具的構造做了大量基礎性工作,也直接導致了ANTLR的產生。

1.1 flex詞法分析器(Lexer)

詞法分析器又稱為Scanner,Lexical analyser和Tokenizer。程序設計語言通常由關鍵字和嚴格定義的語法結構組成。編譯的最終目的是將程序設計語言的高層指令翻譯成物理機器或虛擬機可以執行的指令。詞法分析器的工作是分析量化那些本來毫無意義的字符流,將他們翻譯成離散的字符組(也就是一個一個的Token),包括關鍵字,標識符,符號(symbols)和操作符供語法分析器使用。

1.2 語法分析器(Parser)

編譯器又稱為Syntactical analyser。在分析字符流的時候,Lexer不關心所生成的單個Token的語法意義及其與上下文之間的關系,而這就是Parser的工作。語法分析器將收到的Tokens組織起來,并轉換成為目標語言語法定義所允許的序列。

無論是Lexer還是Parser都是一種識別器,Lexer是字符序列識別器而Parser是Token序列識別器。他們在本質上是類似的東西,而只是在分工上有所不同而已。

1.3 樹分析器 (tree parser)

樹分析器可以用于對語法分析生成的抽象語法樹進行遍歷,并能執行一些相關的操作。

1.4 ANTLR

ANTLR將上述結合起來,它允許我們定義識別字符流的詞法規則和用于解釋Token流的詞法分析規則。然后,ANTLR將根據用戶提供的語法文件自動生成相應的詞法/語法分析器。用戶可以利用他們將輸入的文本進行編譯,并轉換成其他形式(如AST—Abstract Syntax Tree,抽象的語法樹)。

軟件特點

ANTLR使用自上而下的遞歸下降LL剖析器方法,基于LL(*)算法實現,它的文法定義使用類似EBNF的定義方式,使得規則表達簡潔直觀。ANTLR的規則要以分號“;”結束,使用“|”表示“或”的關系,以及“*,+”表示可以出現0次或多次。ANTLR本身使用switch-case來匹配token,形成記號序列記號流,與舊式的Yacc使用符號表的方式不同。ANTLR是完全exception-driven,其LL(k)語法比目前流行的LR剖析器(包含SLR, LALR等)更為強大,可以避免LR剖析器的語法沖突,產生的代碼清楚易懂,便于程序員閱讀和理解。同時,ANTLR還支持Unicode。

功能和服務

ANTLR被廣泛應用于多個領域和項目中,例如Groovy、Jython、Hibernate、OpenJDK 編譯器 Grammar project、賽富時com的Apex語言、Apple的Numbers中的表達式求值器、Twitter的搜索查詢語言、Weblogic server、IntelliJ IDEA、Clion、Apache Cassandra和Processing等。

參考資料 >

生活家百科家居網