ANTLR (v4) 规则不适用

ANTLR (v4) Rule not applying

在我使用 ANTLR (v4) 进行的项目中,我有这样的规则:

Equal     : '::='

Identifier
    : ('A'..'Z' | '_' | '0'..'9') ('a'..'z' | 'A'..'Z' | '_' | '0'..'9')*
    ;
Constant
    : Identifier Equal Expression
    ;

我给它的代码如下: X ::= 1,而不是 "Constant",它以三个单独的标记形式出现:标识符、相等和标识符。我似乎无法弄清楚我做错了什么。也许我应该回去使用 Haskell 的 Parsec 库。 (我停止使用它的原因说来话长。)

它们是 3 个标记,因为中间有 space。当您执行 X::=1 时,它最终会成为单个 Constant 标记。

您可能定义了一个跳过 space-chars 的词法分析器规则,但这只会导致解析器永远看不到这些 space-chars,而不是词法分析器。

您的常量规则应该是解析器规则,那么您就不会有任何问题。创建 1 个常量标记没有多大意义。大概您的表达式规则也应该如此。标记(词法分析器规则)是您的语言的基本构建块。就像化学中的原子。解析器规则(小写规则)用于将这些标记粘合在一起。