为只有一个字符的标识符定义 antlr 规则

ste*_*bln 0 antlr

我喜欢定义一个非常简单的规则,它应该代表标识符。这对于长度超过 1 个字符的标识符非常有效,但对于只有 1 个字符的标识符,我会得到 MismatchedTokenException(64!=45)。这是规则:

ID : ('a'..'z' | 'A'..'Z')+ ;

这有什么问题吗?

谢谢!

ste*_*bln 5

你说得完全正确,规则本身就很好,但我发现 ANTLR 中的很多内容都取决于规则的顺序。我之前还有另一个规则,它已经与 ID 规则匹配了。最后它是有意义的,因为词法分析器无法决定采用哪条规则。

谢谢!