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);
    

语法解析输出结果如下:

  1. 当输入以test开头时,可以正常解析,将解析字符串转换为大写字符。

  1. 当解析字符串不以test开头时,报语法错误,证明语法解析生效。

以上是关于SparkIntelliJ IDEA中语法解析工具ANTLR v4的安装及语法解析的主要内容,如果未能解决你的问题,请参考以下文章

SparkIntelliJ IDEA中语法解析工具ANTLR v4的安装及语法解析

IDEA插件开发(20)--Editor Components

实战必备开发工具解析请别再用eclipse了,idea安装与使用

实战必备开发工具解析请别再用eclipse了,idea安装与使用

04-Java基础语法IDEA方法

知识体系