当前位置: 首页 > 知识库问答 >
问题:

ANTLR4-表示语法谓词,检查任意数量的令牌

萧晔
2023-03-14

在Antlr3中,我有以下语法:

ruleA:
    (ruleBStart) => ruleB
    | ruleC
;
ruleBStart:
    (LPAREN)* SELECT
;
@parser::members{
    public boolean isRuleBStart(int tokenNum)
    {
        int token = _input.LA(tokenNum);
        if (token == EOF) return false; // handling EOF probably needs more work
        if (token == SELECT) return true;
        if (token == LPAREN) return isRuleBStart(tokenNum++);
        return false;
    }
}
ruleA:
    {isRuleBStart(1)}? ruleB
    | ruleC
;
    null

所以我想问问社区是否有一个正确的Antlr4的方法来达到同样的结果。

共有1个答案

司马羽
2023-03-14

不需要使用ANTLR4的语义谓词。如果需要,ALL(*)算法将进行无限的前瞻,因此不需要语义谓词或任何类似的黑客攻击

所以,只要移除这个谓词,一切就可以正常工作了。

 类似资料: