当前位置: 首页 > news >正文

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 如何调用

环境

  1. windows
  2. java 19
  3. 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

http://www.lryc.cn/news/431083.html

相关文章:

  • 法规探讨 | 《医疗器械管理法(草案征求意见稿)》初探(1)
  • 大语言模型的上下文窗口(Context Windows):对人工智能应用的影响
  • Java【数组】
  • xAI巨无霸超级计算机上线:10万张H100 GPU,计划翻倍至20万张
  • python集合
  • 算法打卡 Day29(回溯算法)-复原 IP 地址 + 子集 + 子集 Ⅱ
  • LeetCode 热题100-17 缺失的第一个正数
  • 基于CloudflareSpeedTest项目实现git clone加速
  • 对与单纯post方法写项目的修改成baseservlet方法
  • 北京地铁换乘站人流量监控与图像识别技术优化
  • Day16_0.1基础学习MATLAB学习小技巧总结(16)——元胞数组
  • C#自定义控件的放置与拖动
  • python circular import python循环导入问题
  • kafka集群安装
  • SQL通用语法、SQL分类以及DDL
  • 静态链接和动态链接
  • 构建智能门禁安防系统:树莓派 4B、OpenCV、SQLite 和 MQTT 的应用(代码示例)
  • 基于 Konva 实现Web PPT 编辑器(二)
  • 【开源免费】基于SpringBoot+Vue.JS在线竞拍系统(JAVA毕业设计)
  • Qt TabWidget添加多个窗口,实现分页窗体布局
  • HarmonyOS开发实战( Beta5版)合理使用动画丢帧规范实践
  • 基于BiLSTM-CRF的医学命名实体识别研究(下)模型构建
  • 5.sklearn-朴素贝叶斯算法、决策树、随机森林
  • VMWARE VCENTER6.7 VCSA通过Web5480进行版本升级
  • GIT使用常见问题
  • 内核链表
  • 行空板上YOLO和Mediapipe视频物体检测的测试
  • 【Spring Boot 3】【Web】ProblemDetail
  • 市占率最高的显示器件,TFT_LCD的驱动系统设计--Part 1
  • Linux基础 -- 获取CPU负载信息