java-在idea中antrl的hello world
java-在idea中antrl的hello world
- 1. 在idea中安装ANTLR V4的插件
- 2. 下载ANTLR的jar包
- 3. idea中创建普通的java项目
- 4. 创建一个Hello.g4的文件
- 5. 使用idea生产接口文件
- 6. java创建一个类和main方法
- 7. 调试输出
- 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的文件
这个文件可以创建任何地方,每一个规则都是以;结尾,具体内容如下:
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方法
查看语法分析树
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,就会返回结果匹配
([] hecccc dggggggrrgfgggg)
hecccc
dggggggrrgfgggg
比如我输入字符hecccc dggggg33grrgfgggg,就会返回结果部分匹配
line 1:13 token recognition error at: '3'
line 1:14 token recognition error at: '3'
([] hecccc dggggg)
hecccc
dggggg
比如我输入字符hec dggggg33grrgfgggg,就会返回结果部分匹配
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