java-antrl手敲命令的hello world

2024-09-06 01:44
文章标签 java 命令 hello world antrl

本文主要是介绍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

这篇关于java-antrl手敲命令的hello world的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1140644

相关文章

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

Springboot @Autowired和@Resource的区别解析

《Springboot@Autowired和@Resource的区别解析》@Resource是JDK提供的注解,只是Spring在实现上提供了这个注解的功能支持,本文给大家介绍Springboot@... 目录【一】定义【1】@Autowired【2】@Resource【二】区别【1】包含的属性不同【2】@

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

Java枚举类实现Key-Value映射的多种实现方式

《Java枚举类实现Key-Value映射的多种实现方式》在Java开发中,枚举(Enum)是一种特殊的类,本文将详细介绍Java枚举类实现key-value映射的多种方式,有需要的小伙伴可以根据需要... 目录前言一、基础实现方式1.1 为枚举添加属性和构造方法二、http://www.cppcns.co

Elasticsearch 在 Java 中的使用教程

《Elasticsearch在Java中的使用教程》Elasticsearch是一个分布式搜索和分析引擎,基于ApacheLucene构建,能够实现实时数据的存储、搜索、和分析,它广泛应用于全文... 目录1. Elasticsearch 简介2. 环境准备2.1 安装 Elasticsearch2.2 J

Java中的String.valueOf()和toString()方法区别小结

《Java中的String.valueOf()和toString()方法区别小结》字符串操作是开发者日常编程任务中不可或缺的一部分,转换为字符串是一种常见需求,其中最常见的就是String.value... 目录String.valueOf()方法方法定义方法实现使用示例使用场景toString()方法方法

Java中List的contains()方法的使用小结

《Java中List的contains()方法的使用小结》List的contains()方法用于检查列表中是否包含指定的元素,借助equals()方法进行判断,下面就来介绍Java中List的c... 目录详细展开1. 方法签名2. 工作原理3. 使用示例4. 注意事项总结结论:List 的 contain

Java实现文件图片的预览和下载功能

《Java实现文件图片的预览和下载功能》这篇文章主要为大家详细介绍了如何使用Java实现文件图片的预览和下载功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... Java实现文件(图片)的预览和下载 @ApiOperation("访问文件") @GetMapping("

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis