[英]Antlr4 C++ visit ambiguous branch
所以假設我有這樣的規則:
rule : '(' rule ')' | '!' rule '!';
現在在我的運行時我有這個方法:
antlrcpp::Any runtimeVisitor::visitRule(tinycParser::RuleContext *ctx) {
...
}
我如何檢查我是在第一種情況還是第二種情況? 這樣的事情可能有效嗎?
if(ctx->rule(0)) visitRule(ctx->rule(0))
您可以像這樣 label 您的替代方案:
rule
: '(' rule ')' #ParenthesizedRule
| '!' rule '!' #ExclamationMarkRule
| ...
;
然后您可以為每個替代方法(即visitParenthesizedRule
、 visitExclamationMarkRule
等)定義特定的訪問者方法,而不是visitRule
。
如果您不想在語法中添加任何內容,您也可以只檢查規則的第一個子項是左括號還是感嘆號:
if (ctx.children[0].getText() == "(") {
...
} else if (ctx.children[0].getText() == "!") {
...
} else {
...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.