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

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业

6月9日&#xff0c;国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解&#xff0c;“超级…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)

Aspose.PDF 限制绕过方案&#xff1a;Java 字节码技术实战分享&#xff08;仅供学习&#xff09; 一、Aspose.PDF 简介二、说明&#xff08;⚠️仅供学习与研究使用&#xff09;三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

为什么要创建 Vue 实例

核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...

Unity UGUI Button事件流程

场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...

面试高频问题

文章目录 &#x1f680; 消息队列核心技术揭秘&#xff1a;从入门到秒杀面试官1️⃣ Kafka为何能"吞云吐雾"&#xff1f;性能背后的秘密1.1 顺序写入与零拷贝&#xff1a;性能的双引擎1.2 分区并行&#xff1a;数据的"八车道高速公路"1.3 页缓存与批量处理…...

前端开发者常用网站

Can I use网站&#xff1a;一个查询网页技术兼容性的网站 一个查询网页技术兼容性的网站Can I use&#xff1a;Can I use... Support tables for HTML5, CSS3, etc (查询浏览器对HTML5的支持情况) 权威网站&#xff1a;MDN JavaScript权威网站&#xff1a;JavaScript | MDN...