前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >日常运维|语法分析解析工具之ANTLR4(一)

日常运维|语法分析解析工具之ANTLR4(一)

原创
作者头像
Aion
发布2023-11-21 01:29:19
5890
发布2023-11-21 01:29:19
举报

用ANTLR实现数据加载器语言解释器语言翻译器。基于自动生成的语法分析树解析文件。简单来说就是,ANTLR根据用户自定义的语法文件自动生成词法分析器和语法分析器,并将输入文本处理为语法分析树(可视化)。ANTLR 是一款强大的语法分析器生成工具,可用于读取、处理、执行和翻译结构化的文本或二进制文件。

一、使用场景

1.1、场景

公司企业

用途

备注

Twitter

语法分析

Hadoop生态

Hive、Pig、数据仓库、分析系统

Lex Machina

分析法律文本

Oracle

SQL开发者IDE和迁移工具

NetBeans

解析C++

Hibernate

对象-关系映射框架(ORM)处理HQL语言

其他

文件读取器、遗留代码转换器、维基文本渲染器、JSON解析器、DNA模式匹配、数据读取、语言解释、翻译器

1.2、简单描述

  • 生成语法分析器
  • 自动建立语法分析树
  • 自动生成树遍历
  • 左递归
  • ANTLR4去除了内嵌,取而代之是监听器和访问器

二、 安装、运行、测试

2.1 安装

ANTLR依赖Java环境,所以必须要安装JDK 1.6+,并设置好环境变量。 

1)下载,当前我下载的是antlr-4.9-complete.jar这个版本的jar包

下载jar文件,下载地址参考官网或Github。

  • Mac OS:antler-4.9.1-complete.jar,mac/linux/centos丢在/usr/local/lib下面。
  • Windows:window任意自己想放的位置。

2)配置环境变量

代码语言:javascript
复制
vim ~/.bash_profile
### Antlr path
export CLASSPATH=".:/usr/local/lib/antlr-4.9-complete.jar:$CLASSPATH"
alias antlr4='java -Xmx500M -cp "/usr/local/lib/antlr-4.9-complete.jar:$CLASSPATH" org.antlr.v4.Tool'
alias grun='java -Xmx500M -cp "/usr/local/lib/antlr-4.9-complete.jar:$CLASSPATH" org.antlr.v4.gui.TestRig'

3)检查安装

方式一:使用java执行jar包方式,java -jar [antlr-path]

方式二:执行工具程序

代码语言:javascript
复制
$ java org.antlr.v4.Tool
ANTLR Parser Generator  Version 4.9
 -o ___              specify output directory where all output is generated
 -lib ___            specify location of grammars, tokens files
 -atn                generate rule augmented transition network diagrams
 -encoding ___       specify grammar file encoding; e.g., euc-jp
 -message-format ___ specify output style for messages in antlr, gnu, vs2005
 -long-messages      show exception details when available for errors and warnings
 -listener           generate parse tree listener (default)
 -no-listener        don't generate parse tree listener
 -visitor            generate parse tree visitor
 -no-visitor         don't generate parse tree visitor (default)
 -package ___        specify a package/namespace for the generated code
 -depend             generate file dependencies
 -D<option>=value    set/override a grammar-level option
 -Werror             treat warnings as errors
 -XdbgST             launch StringTemplate visualizer on generated code
 -XdbgSTWait         wait for STViz to close before continuing
 -Xforce-atn         use the ATN simulator for all predictions
 -Xlog               dump lots of logging info to antlr-timestamp.log
 -Xexact-output-dir  all output goes into -o dir regardless of paths/package

方式三:别名方式 java antlr4='java -jar [antlr-path] ',然后可以使用命令antlr4

方式四:将上述命令写入/usr/local/bin目录下

4)小测试步骤

  • 编写.g4文件
  • antlr4 执行.g4文件自动生成.java文件
  • javac 编译.java文件,生成.class文件
  • grun命令执行测试,输入要测试的文本,回车之后执行显示(Mac:control+D,Win:Ctrl+Z)

三、ANTLR入门项目

ANTLR工具和ANTLR运行库API。

语言是由一系列有意义的语句组成,语句是由词组组成,词组是由子词组和词汇符号组成。例如:大象,你,我们,狸花猫。程序是如何来解析这些我们已经熟悉的语言,转变为计算机可以理解的特征性符号?亦或是转换为计算机可以识别的element,you,ours,dragonli。

  • 语法分析树监听器
  • 语法分析树访问器

3.1 入门例子

  • 编写一个ArrayInit.g4文件
代码语言:javascript
复制
// 定义文件,程序语言的名称必须同文件名称一致,都为ArrayInit
grammar ArrayInit;
// 规则
init : '{' value (',' value)* '}' ;
// 语法分析器
value : init
| INT
;
// 词法分析器
INT : [0-9]+ ;
WS  : [ \t\r\n]+ -> skip ;  // 定义词法规则"空白符号"丢弃
  • 使用ANGTLR4生成*.java文件
代码语言:javascript
复制
$ antlr4 ArrayInit.g4
  • 使用JDK编译java文件为.class文件
代码语言:javascript
复制
$ javac *.java
  • 使用antlr4命令测试,并生成解析文件
代码语言:javascript
复制
$ grun ArrayInit init -tokens
// LIST风格展示
$ grun ArrayInit init -tree
// 可视化
$ grun ArrayInit init -gui

3.2 集成Java程序

根据上面的.g4文件(生成后的java存放的包路径修改下即可)

代码语言:javascript
复制
public static void main(String[] args) throws IOException {
    ANTLRInputStream input = new ANTLRInputStream(System.in);
    ArrayInitLexer lexer = new ArrayInitLexer(input);
    CommonTokenStream tokens = new CommonTokenStream(lexer);
    ArrayInitParser parser = new ArrayInitParser(tokens);
    ParseTree tree = parser.init();
    System.out.println(tree.toStringTree(parser));
}

在程序中执行,输入参数后,Mac使用command + D输出,Windows使用Alter + Z输出,UNIX使用Ctrl + D输出

4 总结

学习如逆水行舟,不进则退。如果我们在学习上放松或失去动力,我们的知识和技能水平就会停滞不前,甚至会逐渐退步。因此,我们应该保持积极的心态和持续的努力,不断学习和提高自己的能力,以应对不断变化的世界和工作环境。


我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、使用场景
  • 二、 安装、运行、测试
  • 2.1 安装
  • 三、ANTLR入门项目
    • 3.1 入门例子
      • 3.2 集成Java程序
      • 4 总结
      相关产品与服务
      迁移服务平台
      迁移服务平台(Migration Service Platform,MSP)是帮助客户将系统从源平台迁移到腾讯云的工具。为迁移上云项目提供源端资源调研、上云规划、目标资源创建、批量迁移实施等能力,帮助降低客户迁移上云的复杂度,提升迁移效率。迁移服务平台 MSP 不收取任何额外费用,您只需为购买的资源及 DTS 数据迁移工具付费。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档