java-在idea中antrl的hello world

java-在idea中antrl的hello world

    • [1. 在idea中安装ANTLR V4的插件](#1. 在idea中安装ANTLR V4的插件)
    • [2. 下载ANTLR的jar包](#2. 下载ANTLR的jar包)
    • [3. idea中创建普通的java项目](#3. idea中创建普通的java项目)
    • [4. 创建一个Hello.g4的文件](#4. 创建一个Hello.g4的文件)
    • [5. 使用idea生产接口文件](#5. 使用idea生产接口文件)
    • [6. java创建一个类和main方法](#6. java创建一个类和main方法)
    • [7. 调试输出](#7. 调试输出)
    • [8. 参考链接](#8. 参考链接)

1. 在idea中安装ANTLR V4的插件

路径如下,安装完成后重启idea。

File---settings---搜索Plugins---安装ANTLR V4

重启idea后,会在idea的左下角多出两个antlr的调试窗口:ANTLR Preview和Tool Ooutput。同时也会对.g4文件进行语法识别。

2. 下载ANTLR的jar包

这里下载的是antlr4-4.13.2-complete.jar,可以通过如下链接下载:

https://repo1.maven.org/maven2/org/antlr/antlr4/4.13.2/

3. idea中创建普通的java项目

将下载的antlr4-4.13.2-complete.jar包引入到项目中

4. 创建一个Hello.g4的文件

这个文件可以创建任何地方,每一个规则都是以;结尾,具体内容如下:

java 复制代码
grammar Hello;
line:'hecccc' ID;
ID:[a-z]+;
WS:[ \t\r\n]+ -> skip;

第一行:grammar Hello,表示这个语法规则的名称,这个名字要和文件名字一致

第三行:'hecccc' ID,表示匹配有hecccc的字符串,hecccc后面跟着的是ID,ID的正则表示小写字母

第六行:WS: \\t\\r\\n+ -> skip ,表示换行、tab键盘的符号,直接忽略

5. 使用idea生产接口文件

选中Hello.g4,右键点击Gerneral ANTRL Regonizer,就会在项目的根目录生成一个gen目录,里面就是接口文件。然后将该文件设置为Sources。

6. java创建一个类和main方法

查看语法分析树

java 复制代码
import org.antlr.v4.runtime.CharStream;
import org.antlr.v4.runtime.CharStreams;
import org.antlr.v4.runtime.CommonTokenStream;
import org.antlr.v4.runtime.Lexer;
import org.antlr.v4.runtime.tree.ParseTree;

public class main {
    public static void main(String[] args) {

        CharStream input = CharStreams.fromString("hello eeee");
        Lexer lexer = new HelloLexer(input);

        CommonTokenStream commonTokenStream = new CommonTokenStream(lexer);
        HelloParser helloParser = new HelloParser(commonTokenStream);
        ParseTree parseTree = helloParser.line();

        int childCount = parseTree.getChildCount();
        System.out.println(parseTree.toStringTree());
        for (int i = 0; i < childCount; i++) {
            System.out.println(parseTree.getChild(i));
        }
    }
}

上面代码具体分析见另外一篇文章

https://blog.csdn.net/m0_60688978/article/details/141961105

7. 调试输出

比如我输入字符hecccc dggggggrrgfgggg,就会返回结果匹配

java 复制代码
([] hecccc dggggggrrgfgggg)
hecccc
dggggggrrgfgggg

比如我输入字符hecccc dggggg33grrgfgggg,就会返回结果部分匹配

java 复制代码
line 1:13 token recognition error at: '3'
line 1:14 token recognition error at: '3'
([] hecccc dggggg)
hecccc
dggggg

比如我输入字符hec dggggg33grrgfgggg,就会返回结果部分匹配

java 复制代码
line 1:0 missing 'hecccc' at 'hec'
([] <missing 'hecccc'> hec)
<missing 'hecccc'>
hec

8. 参考链接

手动下载jar包链接

https://repo1.maven.org/maven2/org/antlr/antlr4/4.13.2/

antrl官网

https://github.com/antlr/antlr4/blob/master/doc/java-target.md

相关推荐
下一站春风里21 分钟前
位运算完整学习笔记:按位与(&)+ 异或(^)
开发语言·c++·算法
FinelyYang1 小时前
考试系统简答题 AI 阅卷:覆盖度驱动、异步评分与人机协同落地实践
java·大数据·人工智能
天外飞雨道沧桑1 小时前
我在浏览器里练了一个 792 参数的大模型,它学会了补全 JavaScript
开发语言·javascript·ai·ecmascript·ai编程
hhhjhl1 小时前
Yup 跨端三方库仓颉适配全流程
java·开发语言
运维行者_2 小时前
网络监控工具怎么选?从设备监控到智能运维的能力清单
运维·服务器·开发语言·网络·人工智能·支持向量机·php
用户3126874877202 小时前
Java 对象内存布局:压缩指针、对齐填充与 JOL 实测
java
东华果汁哥2 小时前
【Spring AI 实战】从零开始调用大模型接口,构建 Java AI 应用
java·人工智能·spring
“AI国潮设计-小江”2 小时前
【AIGC实战】Python+SDXL打造“潮汕英歌舞IP”万能立牌插件,批量生成“发财元宝蛋糕”视觉营销方案(附源码)
开发语言·人工智能·python·prompt·aigc
Song_RsHt2 小时前
Redis 与微服务,什么场景下无可替代
java·redis·后端·学习·微服务
学长毕设3 小时前
基于SpringBoot的建筑材料管理系统-附源码
java·spring boot·后端