Antlr4 C++访问模棱两可的分支



假设我有这样的规则:

rule : '(' rule ')' | '!' rule '!';

现在在我的运行时中,我有这种方法:

antlrcpp::Any runtimeVisitor::visitRule(tinycParser::RuleContext *ctx) { 
...
}

如何检查我是握拳还是在第二种情况下?这样的东西可能有效吗?

if(ctx->rule(0)) visitRule(ctx->rule(0))

您可以像这样标记您的替代方案:

rule
: '(' rule ')' #ParenthesizedRule
| '!' rule '!' #ExclamationMarkRule
| ...
;

然后,您可以为每个替代方案定义特定的访问者方法(即visitParenthesizedRulevisitExclamationMarkRule等(而不是visitRule.

如果您不想在语法中添加任何内容,也可以只检查规则的第一个子项是左括号还是感叹号:

if (ctx.children[0].getText() == "(") {
...
} else if (ctx.children[0].getText() == "!") {
...
} else {
...
}

相关内容

  • 没有找到相关文章

最新更新