SparkIntelliJ IDEA中语法解析工具ANTLR v4的安装及语法解析
Posted 魏晓蕾
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SparkIntelliJ IDEA中语法解析工具ANTLR v4的安装及语法解析相关的知识,希望对你有一定的参考价值。
1、在线安装ANTLR v4语法解析插件
2、Spark SQL中的语法解析.g4文件
从Spark源码中拷贝语法解析文件SqlBaseLexer.g4和SqlBaseParser.g4到项目目录中。
这两个文件在Spark源码中的路径为:
spark\\sql\\catalyst\\src\\main\\antlr4\\org\\apache\\spark\\sql\\catalyst\\parser\\SqlBaseLexer.g4和
spark\\sql\\catalyst\\src\\main\\antlr4\\org\\apache\\spark\\sql\\catalyst\\parser\\SqlBaseParser.g4。
3、配置SqlBaseParser.g4文件
在项目src/java下新建sqlparser包,配置SQL语法解析类输出路径:
4、生成SQL语法解析类
在Java代码或者Scala代码中调用SQL解析类中的方法,可以实现在代码中进行SQL语句解析。
5、SQL语句解析
SQL语句示例一:
SELECT * FROM SCORE
SQL语句语法树构建如下:
SQL语句示例二:
SELECT AVG(V) FROM (
SELECT SCORE.ID, SCORE.MATH_SCORE + SCORE.ENGLISH_SCORE AS V
FROM PEOPLE JOIN SCORE ON PEOPLE.ID = SCORE.ID
WHERE PEOPLE.AGE > 18
) TMP
SQL语句语法树构建如下:
6、离线配置antlr-4.9.3-complete.jar
在ANTLR官网下载最新版jar包:antlr-4.9.3-complete.jar,下载地址:https://www.antlr.org/download.html,选择“ANTLR tool itself”,是完整版本的ANTLR jar包。
将jar包放到安装目录下:G:\\E\\BigData\\spark\\,将该目录加入系统Path路径。
在该目录下创建.bat批处理文件:antlr4.bat
java -cp antlr-4.9.3-complete.jar org.antlr.v4.Tool %*
pom.xml中添加如下依赖:
<dependency>
<groupId>org.antlr</groupId>
<artifactId>antlr4-runtime</artifactId>
<version>4.9.3</version>
</dependency>
6、自定义语法解析文件CustomParser.g4
grammar CustomParser;
@header
package customparser;
testParser: 'test' ID; //match keyword test followed by an identifier
ID: [A-Za-z0-9]+; //match identifiers
WS: [ \\t\\r\\n]+ -> skip; //skip spaces,tabs,newlines
在src/java目录下新建customparser包,配置CustomParser.g4的语法解析类输出目录。
生成CustomParser.g4的语法解析类。
用自定义语法解析文件CustomParser.g4解析语法。
7、在Java代码中进行语法解析
新建包src/java/parserimplement,新建类MyCustomParserListener,继承自刚才生成的CustomParserBaseListener,重写exitTestParser()方法,作用为将输入转换成大写字符。
package parserimplement;
import customparser.CustomParserBaseListener;
import customparser.CustomParserParser;
public class MyCustomParserListener extends CustomParserBaseListener
@Override
public void exitTestParser(CustomParserParser.TestParserContext ctx)
final String a = ctx.getChild(0).getText().toUpperCase();
final String b = ctx.getChild(1).getText().toUpperCase();
System.out.println(a + " " + b);
super.exitTestParser(ctx);
入口类TestAntlr4.java:
package parserimplement;
import customparser.CustomParserLexer;
import customparser.CustomParserParser;
import org.antlr.v4.runtime.ANTLRInputStream;
import org.antlr.v4.runtime.CommonTokenStream;
import org.antlr.v4.runtime.tree.ParseTreeWalker;
public class TestAntlr4
public static void main(String[] args)
//输入test mycustomname
ANTLRInputStream inputStream = new ANTLRInputStream("test mycustomname");
//构建词法分析器
CustomParserLexer lexer = new CustomParserLexer(inputStream);
//构建词法符号的缓冲区,用于存储词法分析器生成的词法符号
CommonTokenStream tokenStream = new CommonTokenStream(lexer);
//构建语法分析器,处理词法符号缓冲区内容
CustomParserParser parser = new CustomParserParser(tokenStream);
//针对规则,开始语法分析
CustomParserParser.TestParserContext context = parser.testParser();
//构建监听器
MyCustomParserListener listener = new MyCustomParserListener();
//使用监听器初始化对语法分析树的遍历
ParseTreeWalker.DEFAULT.walk(listener, context);
语法解析输出结果如下:
- 当输入以test开头时,可以正常解析,将解析字符串转换为大写字符。
- 当解析字符串不以test开头时,报语法错误,证明语法解析生效。
以上是关于SparkIntelliJ IDEA中语法解析工具ANTLR v4的安装及语法解析的主要内容,如果未能解决你的问题,请参考以下文章
SparkIntelliJ IDEA中语法解析工具ANTLR v4的安装及语法解析
IDEA插件开发(20)--Editor Components
实战必备开发工具解析请别再用eclipse了,idea安装与使用