Antlr是什么
ANTLR (ANother Tool for Language Recognition
) 是一種語言工具,它提供了一個框架,可以根據(jù)語法文件(語法描述語言編寫的文件)生成該語法所對應的語言識別器
耳幢、編譯器
和解釋器
爸邢。 例如科乎,給定一個識別JSON
的語法密强,ANTLR將會根據(jù)該語法生成一個程序,此程序可以通過ANTLR來識別輸入的json字符串癣朗。
環(huán)境搭建
這里使用Antlr4(version 4.7.2)
下載
從ANTLR官網(wǎng)下載 ANTLR工具-4.7.2
配置
假設(shè)將上面下載的jar
放到路徑/usr/local/lib
下(當然隨便你放到哪拾因,只是舉例)
在系統(tǒng)中加入調(diào)用ANTLR命令
(可以不配,不過配了會更方便使用):
- 編輯文件
vi ~/.bash_profile
- 輸入并保存
export ANTLR4_HOME=/usr/local/lib/antlr-4.7.2-complete.jar
export CLASSPATH=$CLASSPATH:$ANTLR4_HOME
# 設(shè)置啟動antlr4的別名
alias antlr4='java -jar /usr/local/lib/antlr-4.7.2-complete.jar'
alias grun='java org.antlr.v4.gui.TestRig'
- 執(zhí)行命令
source ~/.antlr_profile
Example
這個例子是將例如"hello abc"
的字符串解析為抽象語法樹旷余。
假設(shè)工作目錄是 /tmp/test
绢记,在目錄下新建語法文件Hello.g4
:
// 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
接著運行ANTLR,根據(jù)語法文件Hello.g4
生成對應的詞法分析和語法分析程序:
$ cd /tmp/test
$ antlr4 Hello.g4
這時候文件夾下會多出幾個文件(只選擇典型的2個文件說明)
HelloLexer.java 詞法分析
HelloParser.java 語法分析
然后利用javac對Java文件進行編譯:
$ javac Hello*.java
測試
首先是詞法分析測試正卧。啟動grun
蠢熄,測試之前的語法:
$ grun Hello r -tokens
hello parrt # 輸入要被識別的語句
EOF # 在UNIX系統(tǒng)上輸入 Ctrl+D 來輸入文件結(jié)束符
下面就會顯示詞法分析結(jié)果:
[@0,0:4='hello',<'hello'>,1:0]
[@1,6:10='parrt',<ID>,1:6]
[@2,12:11='<EOF>',<EOF>,2:0]
然后進行語法分析測試。
$ grun Hello r -tree
hello parrt
EOF
顯示
(r hello parrt)
還可以將語法樹可視化:
$ grun Hello r -gui
hello parrt
EOF
接著會彈出一個對話框炉旷。
Ref
《ANTLR4 權(quán)威指南》