天天看點

《ANTLR 4權威指南 》一第一部分 Part 1

本節書摘來自華章出版社《antlr 4權威指南 》一書中的第1章,第1.1節,[美] 特恩斯·帕爾(terence parr) 著

張 博 譯,更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。

antlr

1antlr

2

3antlr

4

在第一部分中,我們會安裝antlr,嘗試通過它來識别一個簡單的“hello world”文法,并概覽語言類應用程式的開發過程。在此基礎上,我們會構造一個文法來識别和翻譯形如{1,2,3}的花括号中的一列整數。最後,我們将通過一系列的簡單文法和程式來快速了解antlr的特性。

在本書的第一部分中,我們的目标是大體上知道antlr能做什麼。除此之外,我們還希望探究語言類應用程式的架構。在概覽之後的第2章中,我們将會通過許多真實的例子來循序漸進地、系統性地學習antlr。在開始之前,我們需要首先安裝antlr,然後嘗試用它編寫一份簡單的“hello world”文法。

antlr是用java編寫的,是以你需要首先安裝java,哪怕你的目标是使用antlr來生成其他語言(如c#和c++)的解析器。(我希望在不遠的未來antlr可以支援更多語言。)antlr運作所需的java版本為1.6或更高。

安裝antlr本身僅僅需要下載下傳最新的jar包(例如antlr-4.0-complete.jar),然後把它放在合适的位置。該jar包包含了運作antlr的工具和編譯、執行antlr産生的識别程式所依賴的全部運作庫。它們有何差別呢?簡而言之,antlr工具将文法檔案轉換成可以識别該文法檔案所描述的語言的程式。例如,給定一個識别json的文法,antlr工具将會根據該文法生成一個程式,此程式可以通過antlr運作庫來識别輸入的json。

上述jar包還包含兩個用于提供相關支援的庫:一個複雜的樹形結構生成庫和stringtemplate,這一個用于生成代碼和其他結構化文本的優秀的模闆引擎。在antlr 4.0中,文法本身是通過antlr 3來識别的,是以上述完整版的jar包還包含antlr的早期版本。

你可以通過浏覽器從antlr的網站下載下傳antlr,或者使用指令行工具curl:

《ANTLR 4權威指南 》一第一部分 Part 1

在unix上,/usr/local/lib非常适于存放jar包。在windows上,似乎沒有标準的存放jar包的目錄,是以你可以簡單地将它放在項目檔案夾下。大多數開發環境要求你将jar包放在你的語言類應用程式的依賴清單中。不需要修改配置腳本或者配置檔案之類的東西——你隻需要保證java能夠找到這個jar包即可。

因為本書使用的是指令行,你需要擔負設定classpath環境變量的重任。通過設定好的classpath環境變量,java就能夠找到antlr工具和運作庫。在unix系統上,你可以手動執行以下指令或者将其添加到啟動腳本中(對于bash指令行,就是.bash_profile):

《ANTLR 4權威指南 》一第一部分 Part 1

注意,classpath中的點非常關鍵,它代表目前目錄。沒有它,java編譯器和java虛拟機就無法加載目前目錄的class檔案。在本書中,所有的編譯和測試都是在目前目錄中進行的。

有兩種方式可以檢查antlr的安裝是否正确,第一種是通過不帶參數的antlr指令行工具,第二種是通過java -jar來直接運作antlr的jar包或者直接調用org.antlr.v4.tool類。

《ANTLR 4權威指南 》一第一部分 Part 1

每次都手動輸入這些java指令是一件令人痛苦的事情,是以最好通過别名(alias)或者shell腳本的方式。本書接下來将會使用名為antlr4的别名,在類unix系統上的定義如下:

《ANTLR 4權威指南 》一第一部分 Part 1

此外,也可以将上述指令寫入/usr/local/bin。

《ANTLR 4權威指南 》一第一部分 Part 1

在windows上,可以通過如下批處理指令(假設antlr的jar包已經被放置在c:libraries)實作:

《ANTLR 4權威指南 》一第一部分 Part 1

不管用哪種方法,現在我們可以直接使用antlr4指令了。

《ANTLR 4權威指南 》一第一部分 Part 1

如果你看到了和上面一樣的幫助資訊,證明一切就緒,可以開始接下來的antlr之旅了!