ANTLR4入门学习(一)
- 一、安装Antlr
- 1.1 环境
- 1.2 安装命令
- 1.3 校验安装
- 1.4 自定义脚本
- 二、简单使用
- 2.1 加入Hello parrt语法文件
- 2.2 加入调试工具TestRig
- 2.3 开始调试
- -tokens选项,会打印出全部的词法符号的列表
- -tree会打印出LISP风格文本格式的语法分析书(根节点和子节点在同一行)
- -gui会弹出可视化对话框(Linux命令行无效)
- 命令总结
一、安装Antlr
1.1 环境
cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
1.2 安装命令
cd /usr/local/lib
curl -O https://www.antlr.org/download/antlr-4.7.1-complete.jar
1.3 校验安装
java -jar /usr/local/lib/antlr-4.7.1-complete.jar
或者配置环境变量
vim /etc/profile
除开java配置之外的就是antlr的配置
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:/usr/local/lib/antlr-4.7.1-complete.jar:$CLASSPATH
source /etc/profile
java org.antlr.v4.Tool
出现下图表示成功
1.4 自定义脚本
上面的执行脚本过长,可在/usr/local/bin中添加自定义脚本,达到简单调用目的
cd /usr/local/bin
vim antlr4
文件内容如下
#!/bin/sh
java -cp "/usr/local/lib/antlr-4.7.1-complete.jar:$CLASSPATH" org.antlr.v4.Tool $*
保存,并添加可执行权限
chmod +x antlr4
再次调用antlr4,和上述结果一致
二、简单使用
2.1 加入Hello parrt语法文件
在/tmp/test目录下,创建对应语法文件Hello.g4
grammar Hello; //定义一个名为Hello的语法
r : 'hello' ID ; //匹配一个关键字hello和一个紧随其后的标识符
ID : [a-z]+ ; //匹配小写字母组成的标识符
WS : [ \t\r\n] -> skip ; // 忽略空格、Tab、换行以及\r (Windows)
调用脚本生成java文件
antlr4 Hello.g4
调用javac编译文件
javac *.java
2.2 加入调试工具TestRig
位置org.antlr.v4.gui.TestRig
加入自定义脚本grun
cd /usr/local/bin/
vim grun
内容如下
#!/bin/sh
java -cp "/usr/local/lib/antlr-4.7.1-complete.jar:$CLASSPATH" org.antlr.v4.gui.TestRig $*
添加可执行权限
chmod +x grun
效果如下
2.3 开始调试
-tokens选项,会打印出全部的词法符号的列表
grun Hello r -tokens
hello parrt
同时按CTRL+D表明终止输入
输出结果如下
[@1,6:10=‘parrt’,,1:6]
@1表明这个词法符号位于第二个位置(从0开始计数),
6:10 表明由输入文本的第6个到第10个位置之间的字符组成(包含第6个和第10个,同样从0开始计数)
‘parrt’包含的文本内容是parrt;
词法符号类型
1:6 位于输入文本的第一行、第6个位置处(从0开始计数,空格/tab符号被看作一个字符)
-tree会打印出LISP风格文本格式的语法分析书(根节点和子节点在同一行)
grun Hello r -tree
-gui会弹出可视化对话框(Linux命令行无效)
grun Hello r -gui
命令总结
-tokens 打印出词法符号流;
-tree 以LISP格式打印出语法分析树;
-gui 在对话框中以可视化方式显示语法分析树;
-ps file.ps 以PostScript格式生成可视化语法分析树,然后存储到file.ps文件中;
-encoding encodingname 若当前的区域设定无法正确读取输入,使用这个选项指定测试组件输入文件的编码(辅助使用);
-trace 打印规则的名字以及进入和离开该规则时的词法符号;
-diagnostics 开启解析过程中的调试信息输出;
-SLL 使用另外一种更快但是功能稍弱的解析策略。