簡體   English   中英

antlr4 C++訪問模糊分支

[英]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
    | ...
    ;

然后您可以為每個替代方法(即visitParenthesizedRulevisitExclamationMarkRule等)定義特定的訪問者方法,而不是visitRule

如果您不想在語法中添加任何內容,您也可以只檢查規則的第一個子項是左括號還是感嘆號:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM