当前位置: 首页 > 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

相关文章:

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的相应版本&#xff0c;要对应。6.2 [1…...

法规探讨 | 《医疗器械管理法(草案征求意见稿)》初探(1)

昨日&#xff0c;国家药监局综合司正式公开征求《中华人民共和国医疗器械管理法&#xff08;草案征求意见稿&#xff09;》的意见&#xff0c;标志着我国医疗器械管理领域即将进入新的发展阶段。相较于现行的《医疗器械监督管理条例》&#xff0c;《医疗器械法》不仅沿袭了《条…...

大语言模型的上下文窗口(Context Windows):对人工智能应用的影响

大语言模型&#xff08;LLMs&#xff09;极大地提升了人工智能在理解和生成类人文本方面的能力。其中一个影响其效用的基本方面是它们的 “上下文窗口”—— 这个概念直接影响着这些模型接收和生成语言的有效性。我将深入探讨上下文窗口是什么、它们对人工智能应用的影响以及组…...

Java【数组】

数组是一组类型相同的数据&#xff08;基本类型或引用类型&#xff09;的集合&#xff0c;数组中每个数据称为元素。数组也是Java的对象&#xff0c;一旦创建&#xff0c;数组长度就固定了。 创建数组 1.声明一个数组类型的引用变量&#xff08;数组变量&#xff09;&#xff…...

xAI巨无霸超级计算机上线:10万张H100 GPU,计划翻倍至20万张

在短短四个多月的时间里&#xff0c;埃隆马斯克的X公司&#xff08;前身为Twitter&#xff09;推出了世界上最强劲的人工智能训练系统。名为Colossus的超级计算机使用了多达10万张NVIDIA H100 GPU进行训练&#xff0c;并计划在未来几个月内再增加5万张H100和H200 GPU。 “本周末…...

python集合

1. 请解释Python中的集合&#xff08;set&#xff09;是什么&#xff1f; Python中的集合&#xff08;set&#xff09;是一个无序的、不重复的元素序列。它的主要用途是进行成员关系测试和消除重复元素。集合对象还支持数学运算&#xff0c;如并集、交集、差集和对称差分。 以…...

算法打卡 Day29(回溯算法)-复原 IP 地址 + 子集 + 子集 Ⅱ

文章目录 Leetcode 93-复原 IP 地址题目描述解题思路 Leetcode 78-子集题目描述解题思路 Leetcode 90-子集 Ⅱ题目描述解题思路 Leetcode 93-复原 IP 地址 题目描述 https://leetcode.cn/problems/restore-ip-addresses/description/ 解题思路 这是一道切割问题&#xff0c;…...

LeetCode 热题100-17 缺失的第一个正数

缺失的第一个正数 给你一个未排序的整数数组 nums &#xff0c;请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,0] 输出&#xff1a;3 解释&#xff1a;范围 [1,…...

基于CloudflareSpeedTest项目实现git clone加速

1.网络测速 「自选优选 IP」测试 Cloudflare CDN 延迟和速度&#xff0c;获取最快 IP 更多内容参考项目&#xff1a;https://github.com/XIU2/CloudflareSpeedTest 国外很多网站都在使用 Cloudflare CDN&#xff0c;但分配给中国内地访客的 IP 并不友好&#xff08;延迟高、丢…...

对与单纯post方法写项目的修改成baseservlet方法

解决的问题&#xff1a; 1.用baseservlet方法来写&#xff1a; 我之前没听明白gsa讲的那些&#xff0c;然后自己写了注册&#xff0c;用的post方法&#xff0c;就是那个叫我们最好不要用有点low的方法&#xff0c;后面与别人交流后发现是要用baseservlet来写&#xff0c;叫他…...

北京地铁换乘站人流量监控与图像识别技术优化

关于“北京地铁换乘站人流量监控与图像识别技术优化”&#xff0c;可以从以下几个方面进行详细阐述&#xff1a; 一、北京地铁换乘站人流量监控现状 北京地铁作为全国最繁忙的城市轨道交通系统之一&#xff0c;其换乘站的人流量监控是保障运营安全、提高运营效率的关键环节。…...

Day16_0.1基础学习MATLAB学习小技巧总结(16)——元胞数组

利用空闲时间把碎片化的MATLAB知识重新系统的学习一遍&#xff0c;为了在这个过程中加深印象&#xff0c;也为了能够有所足迹&#xff0c;我会把自己的学习总结发在专栏中&#xff0c;以便学习交流。 素材来源“数学建模清风” 特此说明&#xff1a;本博客的内容只在于总结在…...

C#自定义控件的放置与拖动

1、自定义控件 using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Drawing.Drawing2D; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;namespace PartA…...

python circular import python循环导入问题

遇到的问题是因为模块之间存在循环导入&#xff08;circular import&#xff09;&#xff0c;导致了ImportError。循环导入是指两个或多个模块相互导入对方&#xff0c;如模块A导入了模块B的方法&#xff0c;模块B又导入了模块A的方法&#xff0c;从而导致其中一个模块在完全初…...

kafka集群安装

kafka集群安装 文档 kafka单机安装 下载地址 官网&#xff1a;https://kafka.apache.org/最新版本下载页面&#xff1a;https://kafka.apache.org/downloads 说明 版本选择&#xff1a;3.0.0&#xff0c;kafka_2.12-3.0.0.tgz下载地址&#xff1a;https://archive.apache…...

SQL通用语法、SQL分类以及DDL

1.SQL 1.1SQL通用语法 1.SQL语句可以单行或多行书写&#xff0c;以分号结尾2.SQL语句可以使用空格/缩进来增强语句的可读性。3.MySQL数据库的SQL语句不区分大小写&#xff0c;关键字建议使用大写。4.注释&#xff1a; 单行注释&#xff1a;–空格 注释内容或#注释内容&#…...

静态链接和动态链接

静态链接和动态链接是两种将可执行文件与库进行链接的方式。它们的主要区别体现在链接时机、可执行文件的大小以及运行时的灵活性上。 1.静态链接 在静态链接中&#xff0c;所有需要的库&#xff08;例如 C 标准库 libc&#xff09;都会在编译时被复制并嵌入到最终的可执行文…...

构建智能门禁安防系统:树莓派 4B、OpenCV、SQLite 和 MQTT 的应用(代码示例)

一、项目概述 1.1 项目目标和用途 本项目旨在开发一个智能门禁安防系统&#xff0c;该系统利用摄像头和人脸识别技术&#xff0c;结合本地人脸库&#xff0c;实现对进出人员的自动识别和管理。系统能够实时记录进出人员的信息&#xff0c;并对未注册人员进行警报提示。通过与…...

基于 Konva 实现Web PPT 编辑器(二)

动画系统 为了实现演示中复杂的动画效果&#xff0c;使用 Animation 类统一管理&#xff1b;切换动画通过 css animation 实现&#xff0c;并且是应用在 konvajs-content 上&#xff0c;动画则通过 gsap 实现&#xff0c;应用在 Konva.Node 上&#xff0c;实现思路如下&#xf…...

【开源免费】基于SpringBoot+Vue.JS在线竞拍系统(JAVA毕业设计)

本文项目编号 T 013 &#xff0c;文末自助获取源码 \color{red}{T013&#xff0c;文末自助获取源码} T013&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇&#xff0c;在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下&#xff1a; 【Note】&#xff1a;如果你已经完成安装等操作&#xff0c;可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作&#xff0c;重…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 &#xff08;一&#xff09;实时滤波与参数调整 基础滤波操作 60Hz 工频滤波&#xff1a;勾选界面右侧 “60Hz” 复选框&#xff0c;可有效抑制电网干扰&#xff08;适用于北美地区&#xff0c;欧洲用户可调整为 50Hz&#xff09;。 平滑处理&…...

MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例

一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文&#xff1f; 多租户隔离&#xff1a;自动为接入设备追加租户前缀&#xff0c;后端按 ClientID 拆分队列。零代码鉴权&#xff1a;将入站用户名替换为 OAuth Access-Token&#xff0c;后端 Broker 统一校验。灰度发布&#xff1a;根据 IP/地理位写…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中&#xff0c;电磁频谱已成为继陆、海、空、天之后的 “第五维战场”&#xff0c;雷达作为电磁频谱领域的关键装备&#xff0c;其干扰与抗干扰能力的较量&#xff0c;直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器&#xff0c;凭借数字射…...

ip子接口配置及删除

配置永久生效的子接口&#xff0c;2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...