我看了这些,它们似乎没有解决问题:
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