本節書摘來自華章社群《antlr 4權威指南》一書中的第1章,第1.1節安裝antlr,作者[美] 特恩斯·帕爾(terence parr),更多章節内容可以通路雲栖社群“華章社群”公衆号檢視
1.1 安裝antlr
antlr是用java編寫的,是以你需要首先安裝java,哪怕你的目标是使用antlr來生成其他語言(如c#和c++)的解析器。(我希望在不遠的未來antlr可以支援更多語言。)antlr運作所需的java版本為1.6或更高。
為什麼本書使用指令行
在整本書中,我們都會使用指令行(shell)來運作antlr和建構我們的程式。因為開發者使用的開發環境和作業系統五花八門,是以隻有作業系統的shell才是我們公用的“界面”。使用shell也使得開發語言程式的每一個步驟更加清晰和明确。在本書中我将會一直使用mac os x作為示例,不過這些示例指令理論上應該能夠在任何類unix系統的shell中正常工作,同時,在稍作修改後,它們應該能夠适用于windows。
安裝antlr本身僅僅需要下載下傳最新的jar包(例如antlr-4.0-complete.jar),然後把它放在合适的位置。該jar包包含了運作antlr的工具和編譯、執行antlr産生的識别程式所依賴的全部運作庫。它們有何差別呢?簡而言之,antlr工具将文法檔案轉換成可以識别該文法檔案所描述的語言的程式。例如,給定一個識别json的文法,antlr工具将會根據該文法生成一個程式,此程式可以通過antlr運作庫來識别輸入的json。
上述jar包還包含兩個用于提供相關支援的庫:一個複雜的樹形結構生成庫和stringtemplate,這一個用于生成代碼和其他結構化文本的優秀的模闆引擎。在antlr 4.0中,文法本身是通過antlr 3來識别的,是以上述完整版的jar包還包含antlr的早期版本。
stringtemplate引擎
你可以通過浏覽器從antlr的網站下載下傳antlr,或者使用指令行工具curl:
在unix上,/usr/local/lib非常适于存放jar包。在windows上,似乎沒有标準的存放jar包的目錄,是以你可以簡單地将它放在項目檔案夾下。大多數開發環境要求你将jar包放在你的語言類應用程式的依賴清單中。不需要修改配置腳本或者配置檔案之類的東西——你隻需要保證java能夠找到這個jar包即可。
因為本書使用的是指令行,你需要擔負設定classpath環境變量的重任。通過設定好的classpath環境變量,java就能夠找到antlr工具和運作庫。在unix系統上,你可以手動執行以下指令或者将其添加到啟動腳本中(對于bash指令行,就是.bash_profile):
注意,classpath中的點非常關鍵,它代表目前目錄。沒有它,java編譯器和java虛拟機就無法加載目前目錄的class檔案。在本書中,所有的編譯和測試都是在目前目錄中進行的。
有兩種方式可以檢查antlr的安裝是否正确,第一種是通過不帶參數的antlr指令行工具,第二種是通過java -jar來直接運作antlr的jar包或者直接調用org.antlr.v4.tool類。
每次都手動輸入這些java指令是一件令人痛苦的事情,是以最好通過别名(alias)或者shell腳本的方式。本書接下來将會使用名為antlr4的别名,在類unix系統上的定義如下:
此外,也可以将上述指令寫入/usr/local/bin。
在windows上,可以通過如下批處理指令(假設antlr的jar包已經被放置在c:libraries)實作:
不管用哪種方法,現在我們可以直接使用antlr4指令了。
如果你看到了和上面一樣的幫助資訊,證明一切就緒,可以開始接下來的antlr之旅了!