Antlr4 - 门控语义谓词

时间:2017-09-12 04:45:45

标签: antlr4 predicate

由于Antlr4不再支持门控语义谓词,我想出了一个解决方法。但是,如果有人碰到这个问题,我想知道做这样的事情是否有任何警告,我也遵循最佳做法。

我遵循以下形式的标准“C”if语句: if(评估){      ...代码块 }

以下是代码块中的代码:

if ($result == false) { // If the statement evealuates to false
    // Consume tokens until the end of block marker
    while (getCurrentToken().getText().compareTo("}") != 0){
        consume();
    }

    // Set the parser state as if it had executed the tokens
    _localctx.start = getCurrentToken();
    _ctx.start = getCurrentToken();
    setState(220); 
    _errHandler.sync(this);
    consume(); // Consume the end of block marker

    return _localctx; // Exit the rule
}

我认为Terrance Parr必须有充分的理由去支持门控语义谓词,这似乎是一个简单的解决方法。我只是想知道我是否遗漏了什么。

我测试了它,即使使用'else'也可以。我没有尝试过复合评估报表(即用'&&'或'||'分隔的条件。我很有信心它会起作用。

0 个答案:

没有答案