如何在不更改语法的情况下,在访问期间知道ANTLR解析器当前处于哪个替代规则中



我看了这些,它们似乎并不能解决问题:

有没有办法知道ANTLR解析器当前使用的是哪种替代规则?

如何在访问期间知道ANTLR解析器当前处于哪个替代规则中

例如:

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

最新更新