在 ANTLR4 中,似乎谓词只能放在子规则的前面,以便它们导致子规则被跳过。在我的语法中,一些谓词依赖于出现在子规则末尾附近的标记,在它前面有一个或多个规则调用。例如:
date :
{isYear(_input.LT(3).getText())}?
month day=INTEGER year=INTEGER { ... }
在这个特定的例子中,我知道它month
总是一个单一的标记,所以它总是需要检查的标记 3 isYear()
。不过,一般来说,month
直到运行时,我才知道构成规则的令牌数量。有没有办法获得它的令牌数?