antlr4 idea插件_从定义到AST及其遍历方式,一文带你搞懂Antlr4

本文全面介绍Antlr4,包括其简单介绍、规则文法、基于IDEA的调试方法、AST生成及遍历的Visitor和Listener方式。Antlr4是一款强大的语法分析器生成工具,广泛应用于DSL构建和语言解析。文中详细阐述了Antlr4的文法定义、词法和语法解析,并展示了如何在IDEA中调试和生成AST。
摘要由CSDN通过智能技术生成

​【摘要】本文将首先介绍Antlr4 grammer的定义方式,如何通过Antlr4 grammer生成对应的AST,以及Antlr4 的两种AST遍历方式:Visitor方式和Listener方式。

1、Antlr4简单介绍

Antlr4(Another Tool for Language Recognition)是一款基于Java开发的开源的语法分析器生成工具,能够根据语法规则文件生成对应的语法分析器,广泛应用于DSL构建,语言词法语法解析等领域。现在在非常多的流行的框架中都用使用,例如,在构建特定语言的AST方面,CheckStyle工具,就是基于Antlr来解析Java的语法结构的(当前Java Parser是基于JavaCC来解析Java文件的,据说有规划在下个版本改用Antlr来解析),还有就是广泛应用在DSL构建上,著名的Eclipse Xtext就有使用Antlr。

Antlr可以生成不同target的AST(https://www.antlr.org/download.html),包括Java、C++、JS、Python、C#等,可以满足不同语言的开发需求。当前Antlr最新稳定版本为4.9,Antlr4官方github仓库中,已经有数十种语言的grammer(https://github.com/antlr/grammars-v4,不过虽然这么多语言的规则文法定义都在一个仓库中,但是每种语言的grammer的license是不一样的,如果要使用,需要参考每种语言自己的语法结构的license)。

本文将首先介绍Antlr4grammer的定义方式(简单介绍语法结构,并介绍如何基于IDEA Antlr4插件进行调试),然后介绍如何通过Antlr4 grammer生成对应的AST,最后介绍Antlr4 的两种AST遍历方式:Visitor方式和Listener方式。

2、Antlr4规则文法

下面简单介绍一部分Antlr4的g4(grammar)文件的写法(主要参考Antlr4官方wiki:https://github.com/antlr/antlr4/blob/master/doc/index.md)。最有效的学习Antlr4的规则文法的写法的方法,就是参考已有的规则文法,大家在学习中,可以参考已有语言的文法。而且Antlr4已经实现了数十种语言的文法,如果需要自己定义,可以参考和自己的语言最接近的文法来开发。

2.1Antlr4规则基本语法和关键字

首先,如果有一点儿C或者Java基础,对上手Antlr4 g4的文法非常快。主要有下面的一些文法结构:

  • 注释:和Java的注释完全一致,也可参考C的注释,只是增加了JavaDoc类型的注释;
  • 标志符:参考Java或者C的标志符命名规范,针对Lexer 部分的 Token 名的定义,采用全大写字母的形式,对于parserrule命名,推荐首字母小写的驼峰命名;
  • 不区分字符和字符串,都是用单引号引起来的,同时,虽然Antlrg4支持 Unicode编码(即支持中文编码),但是建议大家尽量还有英文;
  • Action,行为,主要有@header 和@members,用来定义一些需要生成到目标代码中的行为,例如,可以通过@header设置生成的代码的package信息,@members可以定义额外的一些变量到Antlr4语法文件中;
  • Antlr4语法中,支持的关键字有:import,fragment, lexer, parser, grammar, returns, locals, throws, catch, finally,mode, options, tokens。

2.2Antlr4语法介绍

2.2.1语法文件的整体结构及写法示例

Antlr4整体结构如下:

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值