ANTLR4入门(一):Windows安装antlr4命令行环境

news2024/11/16 20:42:38

最近开始学习ANTLR4,《ANTLR 4权威指南》这本书是看完了,现在开始实践,本系列文记录实践过程中的遇到的问题解决过程及心得体会

下载

从antlr官方网站下载最新的antr4版本(jar):https://www.antlr.org/download.html
目前最新的4.11.1版本下载地址为:
https://www.antlr.org/download/antlr-4.11.1-complete.jar

下载后我就立即想试试运行,但问题就来了,antlr-4.11.1-complete.jar是JDK11编译的jar包(包含运行库-----antlr4-runtime),所以必须是Java 11以上的版本才能运行。如果你的开发环境和我一样还是JDK11 以下的版本(我是JDK8)就要麻烦些,得去安装JDK11,这个过程网上都有教程,本文不再赘述。

antlr4.bat

如果你即希望保留之前的JDK 版本,又要在命令行使用用antlr4做测试那么就处理系统中同时有两个JDK的情况,我的开发环境是JDK8,我不可能为了antlr4将系统的默认JDK升级到11.
所以我的做法是写一个如下的脚本(bat),运行anlr4时临时通过修改环境变量PATH使用JDK11作为java环境,运行结束恢复环境变量,即恢复到JDK8
antlr4.bat ---- 将anlr4.bat保存在antlr-4.11.1-complete.jar所在文件夹下

@ECHO OFF
SETLOCAL
SET PATH="C:\Program Files\Java\jdk-11.0.11\bin";%PATH%
SET sh_folder="%~dp0"
PUSHD "%sh_folder%"
java -jar antlr-4.11.1-complete.jar %*
POPD
ENDLOCAL

这里 SETLOCAL即指定脚本中定义的所有变量都是局部,ENDLOCAL,结束批处理文件中环境改动的本地化操作。在执行ENDLOCAL 之后所做的环境改动不再仅限于批处理文件.所以在SETLOCAL,ENDLOCAL之间定义的变量都是局部变量,SETLOCAL 之后所做的环境改动只限于批处理文件,不会影响系统的环境变量设置。
上面的脚本也可以更简单点,不用修改PATH环境变量直接通过绝对路径来指定Java程序
antlr4.bat

@ECHO OFF
SET sh_folder="%~dp0"
PUSHD "%sh_folder%"
"C:\Program Files\Java\jdk-11.0.11\bin\java" -jar antlr-4.11.1-complete.jar %*
POPD

执行 antlr4.bat 输入如下,即说明antlr4能正常工作了:
在这里插入图片描述

grun.bat

ANTLR库中还提供了一个名为TestRig的方便的调试工具。它可以详细列出一个语言类应用程序在匹配输入文本过程中的信息,这些输入文本可以来自文件或者控制台标准输入。TestRig使用Java的反射机制来调用编译后的识别程序。为方便使用,最好通过别名(linux下)或批处理脚本来调用它。所以我也如法炮制做了一个grun.bat用于调用TestRig

grun.bat ---- 将grun.bat保存在antlr-4.11.1-complete.jar所在文件夹下

@ECHO OFF
SETLOCAL
SET PATH="C:\Program Files\Java\jdk-11.0.11\bin";%PATH%
SET sh_folder="%~dp0"
PUSHD "%sh_folder%"
java -cp antlr-4.11.1-complete.jar org.antlr.v4.gui.TestRig %*
POPD
ENDLOCAL

执行grun.bat,如下输出即说明TestRig可以正常工作了:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

牛客java刷题知识点总结(七)

instanceof运算符作用 instance是java的二元运算符,用来判断他左边的对象是否为右面类(接口,抽象类,父类)的实例。 我们考虑的时候,左边的对象如果是父类的引用指向子类的对象,我们用子类对象的…

C++【并查集】

文章目录一、并查集是什么并查集的简单表示并查集的合并并查集的代码实现并查集小练习1并查集小练习2并查集的压缩问题一、并查集是什么 并查集是一个森林 在一些应用问题中,需要将n个不同的元素划分成一些不相交的集合。开始时,每个元素自成一个单元素…

CS61A Lab 4

更好的阅读体验 Lab 4: Recursion, Tree Recursion lab04.zip What Would Python Do? Q1: Squared Virahanka Fibonacci Use Ok to test your knowledge with the following “What Would Python Display?” questions: python3 ok -q squared-virfib-wwpd -u✂️Hint: If…

CountDownLatch类的使用

🎈专栏链接:多线程相关知识详解 目录 一.CountDownLatch的介绍 二.CountDownLatch类里面的方法 三.CountDownLatch的两种应用场景 ①一等多情况 ②多等一情况 一.CountDownLatch的介绍 CountDownLatch是一种用来控制多线程的工具类,它被称为门阀、计数器或者…

LeetCode HOT 100 —— 301.删除无效的括号

题目 给你一个由若干括号和字母组成的字符串 s ,删除最小数量的无效括号,使得输入的字符串有效。 返回所有可能的结果。答案可以按 任意顺序 返回。 思路 DFS 回溯算法: 首先最终合法的方案,必然有左括号的数量 右括号的数量 …

钉钉获取免登用户信息

大家好,这里是一口八宝周👏 欢迎来到我的博客❤️一起交流学习 文章中有需要改进的地方请大佬们多多指点 谢谢🙏 最近好像搞了个什么钉钉小程序,具体做什么咱也不知道,就让我搞一个钉钉获取免登录用户信息的接口出来&…

计网理论模拟

一. 单选题(共10 题,20.0分) 1. (单选题,2.0分)网络协议主要由 3 个基本要素组成,即( ) A. 层次、语义和同步B. 语法、原语和同步C. 语法、语义和同步D. 语法、语义和功能 正确答案: C 2. (单选题,2.0分…

计算机毕业设计ssm+vue基本微信小程序的智能图书管理系统

项目介绍 本设计旨在研究一种社区图书管理系统设计与实现系统,以各种浏览器web页面加上云服务器后端服务系统,通过这一设计过程,进一步熟悉web前端开发技术和云服务器后端开发技术和方法,培养理论联系实际及知识的综合运用能力。 图书管理系统可以有效实现图书管理的规范化、系…

SAP Gateway 后台模型的缓存设置

/iwbep/cl_mgw_med_provider 类里的成员 mv_cache_active: 这个 cache 默认是开启状态。 调用 OData 服务的 MPC_EXT 类的 get_last_modified 方法获取最后一次修改的时间戳。这个时间戳(timestamp)也会影响到 cache 的行为,我们后续也会详细讨论。 第12 行 super 方…

PySpark--spark local 的环境部署

Spark环境搭建-Local 环境搭建 基本原理 本质:启动一个JVM Process进程(一个进程里面有多个线程),执行任务Task Local模式可以限制模拟Spark集群环境的线程数量, 即Local[N] 或 Local[*]其中N代表可以使用N个线程,每个线程拥有一个cpu core。…

【使用Netty实现群发消息】

使用Netty实现群发消息netty简单介绍实现群发流程图代码实现NettyServer 类MyChannelInitializer 类MyServerHandler 类ChannelHandler 类Netty 依赖效果展示netAssist 工具启动Netty server打开netAssist 工具netty简单介绍 Netty是由JBOSS提供的一个java开源框架&#xff0c…

第三十一章 linux-模块的加载过程

第三十一章 linux-模块的加载过程 文章目录第三十一章 linux-模块的加载过程sys_init_modulestruct moduleload_module在用户空间,用insmod这样的命令来向内核空间安装一个内核模块,本节将详细讨论模块加载时的内核行为。当调用“insmod demodev.ko”来安…

通讯录的思路与实现(C语言)

目录 前言 程序的分装 程序的结构 函数实现 通讯录的初始化 通讯录的扩容 将数据保存到本地 增加联系人 显示通讯录所有联系人 目标联系人的检索(根据名称) 目标联系人的检索(根据号码) 检索发展来的函数 删除联系人 查询目标联系人 联系人信息的更改 按名称对通…

Python写个“点球大战”小游戏

大家好,欢迎来到 Crossin的编程教室 ! 看过我Python入门教程的朋友应该会看到其中有提到一个点球小游戏的作业。 在世界杯决赛即将到来之际,我们再来回顾一下这个小游戏。对于刚刚学习编程不久的同学,这是个不错的练手习题&…

(二)RT-Thread入门——线程管理

目录 线程管理 线程管理特点 线程工作机制 线程控制块 线程属性 线程栈 线程状态 线程优先级 时间片 线程入口函数 无限循环模式 顺序执行或有限次循环模式 线程错误码 线程状态切换 线程操作 创建动态线程 删除 初始化静态线程 脱离 获得当前线程 让出…

数据结构基础篇》》用c语言实现复数的八个基本运算

数据结构开讲啦!!!🎈🎈🎈 本专栏包括: 抽象数据类型线性表及其应用栈和队列及其应用串及其应用数组和广义表树、图及其应用存储管理、查找和排序将从简单的抽象数据类型出发,深入浅出…

B-013 缓启动电路设计

缓启动电路设计1 简介2 案例分析2.1 电路说明2.2 原理分析3 电路参数设定说明1 简介 缓启电路的供电是由一个PMOS控制通断的,软启动的设计是让PMOS的导通时间变缓,电路上的做法是在PMOS的栅极和源极之间接一个合适的电容,PMOS的导通时间就会…

Arcgis中创建Python脚本工具

文章目录创建工具步骤第一步:第二步:第三步:定义工具工具箱Toolbox工具类1、__init__2、getParameterInfo3、isLicensed4、updateParameters5、updateMessage6、execute进度条的使用代码相比于自定义工具箱的源脚本和参数定义难以集中管理的缺…

中国专利电子申请网站系统环境配置方法

一、在线平台使用环境要求 支持的操作系统、浏览器、office的版本如下,必须匹配对应的版本: 操作系统:WINDOWS XP、WINDOWS 7、WINDOWS 8 浏览器:IE8、IE9、IE10 文档编辑软件:OFFICE2003、OFFICE2007 强烈推荐使用中…