antlr4的介绍以及常见错误和调试方法

本文简单介绍 antlr4的基本知识,介绍了antlr4 语法中二义性及解决思路,anrlr4 可能出现的错误,以及错误定位和解决的办法。简单介绍ANTLR(Another Tool for Language Recognition)是一个开源的语法分析器生成工具。ANTLR4 语法分析器使用了一种名为自适应的 LL(*) 或者 ALL(*)(读作 all star)的新技术,ALL(*)是 ...
摘要由CSDN通过智能技术生成

本文简单介绍 antlr4的基本知识,介绍了antlr4 语法中二义性及解决思路,anrlr4 可能出现的错误,以及错误定位和解决的办法。

简单介绍

ANTLR(Another Tool for Language Recognition)是一个开源的语法分析器生成工具。ANTLR4 语法分析器使用了一种名为自适应的 LL(*) 或者 ALL(*)(读作 all star)的新技术,ALL(*)是 ANTLR3 中 LL(*)的扩展。

早期 Antlr 的 LL(*) 文法仍不支持“左递归”(left-recursion),这是所有LL剖析器]的局限,在左递归过程没有消耗掉任何token, LL 分析器很容易造成stack overflow。ANTLR4 的 ALL(*) 解决了左递归的问题,但是仍然不能处理间接左递归的情况1

antlr4 是用 java 编写的,所以首先保证环境中 java 环境已经正确安装。在官网或者 github 下载 antlr-4.7.1-complete.jar,然后配置环境变量如下

# ANTLR
ANTLRPATH=/home/jona/software/antlr4/antlr-4.7.1-complete.jar
export CLASSPATH=.:$ANTLRPATH:$CLASSPATH
alias antlr4="java -Xmx1000M -cp "/home/jona/software/antlr4/antlr-4.7.1-complete.jar:$CLASSPATH" org.antlr.v4.Tool"
alias grun="java org.antlr.v4.gui.TestRig"

这样就能使用antlr4 工具了。antlr4 的 IDE 名为 antlrworks2。使用图形工具编写语法规则会更加高效。

antlr4 虽然是用 java 语言写的,但是生成的目标语言可以支持 cpp, c sharp, go, java, php, python 和 swift。在源码目录 antl4/runtime 中可以查看得到。antlr4 支持上写文无关文法规则(context-free),能够根据语法规则生成相应的语法解析代码,开发者根据生成的代码,编写自己的逻辑。

antlr4 工具提供如下选项

 -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

antlr4 提供了两种访问模式,一个是访问者 visitor 模式,一个是监听器 listener 模式,-visitor-no-visitor 分别是打开访问者和关闭访问者的选项,-listener-no-listener 分别是打开监听器和关闭监听器的模式。-long-messages会显示详细的错误信息和告警信息。 -package 选项,会在代码生成时,制定代码所在的 names

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
ANTLR(ANother Tool for Language Recognition)是一个用于构建语法分析器的工具。ANTLR3和ANTLR4是ANTLR的两个主要版本,它们之间有几个重要的区别: 1. 语法规则定义:ANTLR3使用基于词法分析器和语法分析器的Combined Grammar形式,将词法规则和语法规则组合在一起。ANTLR4引入了新的语法定义方式,使用单独的词法规则和语法规则文件。 2. 词法规则:ANTLR4的词法规则采用了更严格的匹配方式。它引入了词法模式(lexical mode),允许开发者对不同上下文下的词法规则进行不同的处理。 3. 错误处理:ANTLR4提供了更强大的错误处理机制。它支持自定义错误处理器,开发者可以通过重写错误处理方法来实现自定义的错误处理策略。 4. 性能优化:ANTLR4在性能方面进行了优化,相对于ANTLR3,它生成的语法分析器更高效、更快速。ANTLR4引入了SLL模式(Strong LL parser),在解析过程中尽可能地使用单看头(single-token lookahead)来加速解析。 5. 支持的目标语言:ANTLR3支持多种目标语言(如Java、C++、C#等),而ANTLR4更进一步扩展了这个列表,支持更多的编程语言(如Python、JavaScript等)。 总体而言,ANTLR4相对于ANTLR3在语法定义、错误处理、性能和目标语言支持等方面有着显著的改进。因此,如果选择使用ANTLR,通常推荐使用ANTLR4来获得更好的开发体验和性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猫步旅人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值