如何在不改变语法的情况下知道ANTLR解析器在访问期间当前处于哪个替代规则中 [英] How to know which alternative rule ANTLR parser is currently in during visit without changing the grammar

查看:0
本文介绍了如何在不改变语法的情况下知道ANTLR解析器在访问期间当前处于哪个替代规则中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我看了这些,它们似乎没有解决问题:

Is there a way to know which alternative rule ANTLR parser is currently in?

How to know which alternative rule ANTLR parser is currently in during visit

例如:

oC_ListOperatorExpression : 
( SP IN SP? oC_PropertyOrLabelsExpression ) 
| ( SP? '[' oC_Expression ']' ) 
| ( SP? '[' oC_Expression? '..' oC_Expression? ']' ) ; 

在此特定情况下,备选方案2和备选方案3在固定位置没有特殊的记号或记号,我可以利用它们来区分它们。

如何才能在不更改语法的情况下辨别我在以下内容中使用的备选方案?

antlrcpp::Any visitOC_ListOperatorExpression( 
 CypherParser::OC_ListOperatorExpressionContext* ctx) override {
} 

我使用的是ANTLR4 4.9.3.1的C++运行时。

完整语法: https://s3.amazonaws.com/artifacts.opencypher.org/M18/Cypher.g4

推荐答案

您可以向最后一个备选方案中的两个oC_Expression添加标签。然后,您可以检查它们是否存在。

(甚至只检查第二个oC_Expression

这篇关于如何在不改变语法的情况下知道ANTLR解析器在访问期间当前处于哪个替代规则中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆