antlr java_Antlr4 入门
Antlr是什么
ANTLR (ANother Tool for Language Recognition ) 是一種語(yǔ)言工具,它提供了一個(gè)框架,可以根據(jù)語(yǔ)法文件(語(yǔ)法描述語(yǔ)言編寫(xiě)的文件)生成該語(yǔ)法所對(duì)應(yīng)的語(yǔ)言識(shí)別器、編譯器和解釋器。 例如,給定一個(gè)識(shí)別JSON的語(yǔ)法,ANTLR將會(huì)根據(jù)該語(yǔ)法生成一個(gè)程序,此程序可以通過(guò)ANTLR來(lái)識(shí)別輸入的json字符串。
環(huán)境搭建
這里使用Antlr4(version 4.7.2)
下載
配置
假設(shè)將上面下載的jar放到路徑/usr/local/lib下(當(dāng)然隨便你放到哪,只是舉例)
在系統(tǒng)中加入調(diào)用ANTLR命令(可以不配,不過(guò)配了會(huì)更方便使用):
編輯文件vi ~/.bash_profile
輸入并保存
export ANTLR4_HOME=/usr/local/lib/antlr-4.7.2-complete.jar
export CLASSPATH=$CLASSPATH:$ANTLR4_HOME
# 設(shè)置啟動(dòng)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
這個(gè)例子是將例如"hello abc"的字符串解析為抽象語(yǔ)法樹(shù)。
假設(shè)工作目錄是 /tmp/test,在目錄下新建語(yǔ)法文件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
接著運(yùn)行ANTLR,根據(jù)語(yǔ)法文件Hello.g4生成對(duì)應(yīng)的詞法分析和語(yǔ)法分析程序:
$ cd /tmp/test
$ antlr4 Hello.g4
這時(shí)候文件夾下會(huì)多出幾個(gè)文件(只選擇典型的2個(gè)文件說(shuō)明)
HelloLexer.java 詞法分析
HelloParser.java 語(yǔ)法分析
然后利用javac對(duì)Java文件進(jìn)行編譯:
$ javac Hello*.java
測(cè)試
首先是詞法分析測(cè)試。啟動(dòng)grun,測(cè)試之前的語(yǔ)法:
$ grun Hello r -tokens
hello parrt # 輸入要被識(shí)別的語(yǔ)句
EOF # 在UNIX系統(tǒng)上輸入 Ctrl+D 來(lái)輸入文件結(jié)束符
下面就會(huì)顯示詞法分析結(jié)果:
[@0,0:4='hello',,1:0]
[@1,6:10='parrt',,1:6]
[@2,12:11='',,2:0]
然后進(jìn)行語(yǔ)法分析測(cè)試。
$ grun Hello r -tree
hello parrt
EOF
顯示
(r hello parrt)
還可以將語(yǔ)法樹(shù)可視化:
$ grun Hello r -gui
hello parrt
EOF
接著會(huì)彈出一個(gè)對(duì)話框。
hello-parrt.png
Ref
《ANTLR4 權(quán)威指南》
總結(jié)
以上是生活随笔為你收集整理的antlr java_Antlr4 入门的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【云计算与大数据技术】大数据系统总体架构
- 下一篇: QPI与GMI/Infinity Fab