我看了这些,它们似乎并不能解决问题:
有没有办法知道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