30分钟概览解析器工具Antlr4
来源:互联网 发布:js写日历 编辑:程序博客网 时间:2024/06/15 19:55
本文主要面向初学者介绍Antlr4,一款常用语词法语法解析器生成的第三方工具包。全文主要回答几个问题:
- 1、antlr的是什么?
- 2、antlr的功能有哪些,如何使用?
- 3、在公司中使用antlr案例?
不知道各位是如何关注到antlr,笔者是因为硕士阶段需要写SQL解析器才渐渐了解到它。后来发现它在大数据中非常实用,尤其在SQL方面。
Terence Parr的The Definitive Antlr 4 Reference
1、antlr的是什么?
它是一个非常强大的文本及二进制文件的解析、翻译和处理的工具。大家熟悉的Hive和Spark使用antlr生成词法语法解析器、Twitter使用antlr来解析用户输入的查询内容,Oracle把antlr的功能内嵌在SQL 开发IDE中,NetBeans IDE使用antlr解析C++语言,也有公司使用antlr来从文件中抽取信息。
以上都是很官方的说明,antlr到底是什么,该怎么用,下面举2个简单例子,一个是简化SQL解析器,一个是翻译器。antlr的使用从写文法文件开始,文件后缀是g4.
2、antlr的功能及使用
1)简易SQL解析器g4文法文件
这里创建一个SqlExample.g4的文件
grammar SqlExample:fragment A_ : 'a' | 'A';fragment B_ : 'b' | 'B';fragment C_ : 'c' | 'C';fragment D_ : 'd' | 'D';fragment E_ : 'e' | 'E';fragment F_ : 'f' | 'F';fragment G_ : 'g' | 'G';fragment H_ : 'h' | 'H';fragment I_ : 'i' | 'I';fragment J_ : 'j' | 'J';fragment K_ : 'k' | 'K';fragment L_ : 'l' | 'L';fragment M_ : 'm' | 'M';fragment N_ : 'n' | 'N';fragment O_ : 'o' | 'O';fragment P_ : 'p' | 'P';fragment Q_ : 'q' | 'Q';fragment R_ : 'r' | 'R';fragment S_ : 's' | 'S';fragment T_ : 't' | 'T';fragment U_ : 'u' | 'U';fragment V_ : 'v' | 'V';fragment W_ : 'w' | 'W';fragment X_ : 'x' | 'X';fragment Y_ : 'y' | 'Y';fragment Z_ : 'z' | 'Z';keyword : TRUE | FALSE | NOT // ....;SEMI : ';' ;DOT : '.' ;COMMA : ',' ;ASTERISK: '*' ;CREATE: C_ R_ E_ A_ T_ E_ ;DATABASE: D_ A_ T_ A_ B_ A_ S_ E_ ;SCHEMA: S_ C_ H_ E_ M_ A_ ;IF: I_ F_ ;NOT: N_ O_ T_ ;EXISTS: E_ X_ I_ S_ T_ S_ ;TRUE: T_ R_ U_ E_ ;FALSE: F_ A_ L_ S_ E_ ;ID: ( 'A'..'Z' | 'a'..'z' | '_' | '$' | '0'..'9' )+;root_statement: data_definition_statements (SEMI)?;data_definition_statements: create_statement;create_statement: create_database_statement;create_database_statement: CREATE (DATABASE | SCHEMA) (IF NOT EXISTS)? database_name;database_name: ID | keyword;
对该文法文件使用Intellij IDE的antlr4插件运行文法文件,输入:create database online; 则出现生成如下语法树的图:
从图中可以看出该DDL的建表SQL语句被解析后的语法树形状。
g4文法文件通过antlr工具生成lexer词法解析器和parser语法解析器以及visitor和listener的java文件或其他语言文件(支持多语言)。
lexer是对语句进行词法分析,把SQL切分为不同的token,
就可以对语句中的重要信息进行处理。
0 0
- 30分钟概览解析器工具Antlr4
- 30分钟概览Spark Streaming 实时计算
- 30分钟概览Spark分布式计算引擎
- 01_01 工具概览
- 解析XML技术概览
- 使用antlr4及java实现snl语言的解释器
- ANTLR4-实践
- antlr4读书笔记
- 【转】Oracle监控工具概览
- JavaScript 开发测试工具概览
- JavaScript 开发测试工具概览
- UNA 工具概览(一)
- UNA 工具概览(二)
- UNA 工具概览(三)
- 5分钟让你学会用最高效的工具解析所有json
- 5分钟让你学会用最高效的工具解析所有Json
- 5分钟让你学会用最高效的工具解析所有Json
- 十分钟解析LocalBroadcastManager
- 第一个ssh项目的感悟
- CentOS7安装Oracle 12C
- 利用anaconda安装tensorflow
- 用MyEclipse建立第一个Java程序
- 用Eclipse完成C语言编程的几个简单步骤
- 30分钟概览解析器工具Antlr4
- 第七届蓝桥杯【省赛试题5】抽签
- Java 单例
- ARC是什么
- 给 Android 开发者的 RxJava 详解
- 实习问题小汇总
- 小tip:中文英文左右padding一致两端对齐实
- 一对一映射
- Elasticsearch5.0学习与理解翻译(一)