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

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]