本文主要是介绍java-antrl手敲命令的hello world,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
java-antrl手敲命令的hello world
- 环境
- 步骤
- 1. 下载ANTLR的jar包
- 2. 新建一个g4文件
- 3. 生成语法对应的java文件
- 4. 编译语法对应的java文件
- 5. 测试语法
- 5.1 打印测试信息
- 5.2 查看语法分析树
- 6. 注意事项
- 6.1 每一个antlr4版本的jar包都对应java的相应版本,要对应。
- 6.2 [@1,6:10='parrt',<ID>,1:6]解析
- 6.3 如何调用
环境
- windows
- java 19
- antlr4-4.13.2
步骤
1. 下载ANTLR的jar包
这里下载的是antlr4-4.13.2-complete.jar,放入项目根目录的lib目录中,它可以通过如下链接下载:
https://repo1.maven.org/maven2/org/antlr/antlr4/4.13.2/
2. 新建一个g4文件
在根目录中,新建一个Hello.g4的文件
grammar Hello;
r : 'hecccc' ID;
ID: [a-z]+ ;
WS: [ \t\r\n]+ -> skip ;
3. 生成语法对应的java文件
进入到项目跟目录,使用如下命令
java -jar .\lib\antlr4-4.13.1-complete.jar ./src/Hello.g4
生成文件如下
D:\源码\kafka-2.1\antlr\Hello.interp
D:\源码\kafka-2.1\antlr\Hello.tokens
D:\源码\kafka-2.1\antlr\HelloBaseListener.java
D:\源码\kafka-2.1\antlr\HelloLexer.interp
D:\源码\kafka-2.1\antlr\HelloLexer.java
D:\源码\kafka-2.1\antlr\HelloLexer.tokens
D:\源码\kafka-2.1\antlr\HelloListener.java
D:\源码\kafka-2.1\antlr\HelloParser.java
4. 编译语法对应的java文件
cd到项目的根目录,执行如下命令,在当前目录生成class字节码文件,以便后续java的main方法调用
1.8的java环境命令如下
javac -Djava.ext.dirs=./lib/antlr4-4.13.1-complete.jar ./src/*.java -d .
11以上的java环境命令如下
javac -classpath ./lib/antlr4-4.13.1-complete.jar ./src/*.java -d .
最终得到的文件如下
D:\源码\kafka-2.1\antlr\Hello.interp
D:\源码\kafka-2.1\antlr\Hello.tokens
D:\源码\kafka-2.1\antlr\HelloBaseListener.class
D:\源码\kafka-2.1\antlr\HelloBaseListener.java
D:\源码\kafka-2.1\antlr\HelloLexer.class
D:\源码\kafka-2.1\antlr\HelloLexer.interp
D:\源码\kafka-2.1\antlr\HelloLexer.java
D:\源码\kafka-2.1\antlr\HelloLexer.tokens
D:\源码\kafka-2.1\antlr\HelloListener.class
D:\源码\kafka-2.1\antlr\HelloListener.java
D:\源码\kafka-2.1\antlr\HelloParser.class
D:\源码\kafka-2.1\antlr\HelloParser.java
5. 测试语法
在保证class字节码文件和Java文件、g4文件在同一目录情况下,使用下面的命令,这里需要注意的是-cp后面一定要加.;这个两个字符,否则会报错Can’t load Hello as lexer or parser。
5.1 打印测试信息
这里执行命令后,如果没有报错,就输入你要检测的字符,这里是hello parrt,然后回车,然后windows cmd 退出键ctr+z,最后回车就可以打印信息。
D:\源码\kafka-2.1\antlr> java -cp “.;./antlr4-4.13.1-complete.jar” org.antlr.v4.gui.TestRig Hello r -tokens
hello parrt
^Z
[@0,0:4=‘hello’,,1:0]
[@1,6:10=‘parrt’,,1:6]
[@2,13:12=‘’,,2:0]
line 1:0 missing ‘hecccc’ at ‘hello’
5.2 查看语法分析树
D:\源码\kafka-2.1\antlr> java -cp “.;./antlr4-4.13.1-complete.jar” org.antlr.v4.gui.TestRig Hello r -gui
hello parrt
^Z
执行完了以后就会弹出语法书对话框。
6. 注意事项
6.1 每一个antlr4版本的jar包都对应java的相应版本,要对应。
如果有报错,根据报错信息切换到对应版本就可以了,如下就是要55的java版本
more recent version of the java runtime (class file version 55.0), this version of the java runtime only recognizes class file versions up to 52.0
版本对应关系如下
9 = Java 5
50 = Java 6
51 = Java 7
52 = Java 8
53 = Java 9
54 = Java 10
55 = Java 11
56 = Java 12
57 = Java 13
58 = Java 14
59 = Java 15
60 = Java 16
61 = Java 17
62 = Java 18
63 = Java 19
6.2 [@1,6:10=‘parrt’,,1:6]解析
表示的是位于g4文件的第二行词法,6到10的位置,包含的字符是parrt,词法类型是ID,位于输入字符串的第一行、第六个位置。
6.3 如何调用
请参考另外一篇文章
https://blog.csdn.net/m0_60688978/article/details/141893455?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22141893455%22%2C%22source%22%3A%22m0_60688978%22%7D
这篇关于java-antrl手敲命令的hello world的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!