簡介:antlr工具將語法文件轉換成能夠識別該語法文件所描述的語言的程序.java
例如:給定一個識別json的語法,antlr工具將會根據該語法生成一個程序,該程序能夠經過antlr運行庫來識別輸入的json.json
1.下載jar包,antlr-4.7.1-complete.jarapi
http://www.antlr.org/download/
2.將這個jar包移動到 /usr/local/lib 目錄下bash
3.修改 ~.bashrc 文件ide
#Java export JAVA_HOME=/usr/local/jdk1.8.0_121 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:/usr/local/lib/antlr-4.7.1-complete.jar export PATH=${JAVA_HOME}/bin:$PATH alias antlr4='java -Xmx500M -cp "/usr/local/lib/antlr-4.7.1-complete.jar:$CLASSPATH" org.antlr.v4.Tool' alias grun='java org.antlr.v4.runtime.misc.TestRig'
其中的TestRig是一個antlr在運行庫中提供的一個調試工具,它能夠詳細列出一個語言類應用程序在匹配輸入文本過程當中的信息,這些輸入文本能夠來自文件或者標準輸入.TestRig使用java的反射機制來調用編譯後的識別程序,這裏使用grun做爲別名.工具
4. source ~/.bashrc測試
5. 在idea中安裝antlr插件ui
6. 創建一個 Hello.g4 文件進行測試idea
//Define a grammar called Hello grammar Hello; r : 'hello' ID; // match keyword hello followed by an identifier ID : [a-z]+; // match lower-case identifiers WS : [ \t\r\n]+ -> skip; // skip spaces, tabs, newlines
7. 生成java文件和編譯java文件spa
antlr4 Hello.g4 javac Hello*.java
xxxParser.java 該文件包含一個語法分析器類的定義,這個語法分析器專門用來識別語法xxx的.
在該類中,每條規則都有對應的方法,此外還有一些輔助代碼
xxxLexer.java 該文件包含的是詞法分析器的類定義,它是由antlr經過分析詞法規則,以及語法中的字面值'{' ',' '}'等生成的.詞法分析器的做用是將輸入字符序列分解成詞彙符號
xxx.tokens antlr會給每一個咱們定義的詞法符號指定一個數字形式的類型,而後將它們的對應關係存儲於該文件中.
xxxListener.java xxxBaseListener.java 在遍歷語法分析樹的時候,遍歷器可以觸發一系列事件(回調),並通知咱們提供的監聽器對象.xxxListener接口給出了這些回調方法的定義,咱們能夠實現它來完成自定義的功能.
8.查看結果,注意輸入hello world以後要ctrl+D
其餘參數詳情請參考ANTLR4權威指南28頁
- tokens #打印出token流 - tree #用LISP表單打印出解析樹 - gui #在對話框中可視化地展現解析樹
tokens 打印出詞法符號流
grun Hello r -tokens Warning: TestRig moved to org.antlr.v4.gui.TestRig; calling automatically hello world [@0,0:4='hello',<'hello'>,1:0] [@1,6:10='world',<ID>,1:6] [@2,12:11='<EOF>',<EOF>,2:0]
tree 以LISP格式打印出詞法分析樹
grun Hello r -tree Warning: TestRig moved to org.antlr.v4.gui.TestRig; calling automatically hello world (r hello world)
gui 顯示語法分析樹
grun Hello r -gui Warning: TestRig moved to org.antlr.v4.gui.TestRig; calling automatically hello world
antlr提供兩種遍歷語法分析樹的方式:1.監聽器 和 2.訪問者模式
在antlr的jar包中,有兩個關鍵部分:1.antlr工具 和 2.antlr運行庫(運行時語法分析)api
antlr工具:使用org.antlr.v3.Tool類來生成一些代碼(語法分析器和詞法分析器)
antlr運行庫:是一個由若干類和方法組成的庫,這些類和方法是自動生成的代碼(如parse,lexer和token)運行所必須的