ANTLR(第4节)规则不适用

时间:2015-06-01 20:13:27

标签: java antlr4

在我正在ANTLR(v4)工作的项目中,我有这样的规则:

Equal     : '::='

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

我给它代码如下: X ::= 1,而不是它是“常量”,它作为三个单独的标记出现:标识符,等号和标识符。我似乎无法弄清楚我做错了什么。也许我应该回到使用Haskell的Parsec库。 (我停止使用它的原因很长。)

1 个答案:

答案 0 :(得分:1)

它们是3个令牌,因为它们之间有空格。当您执行X::=1时,它最终会成为一个Constant令牌。

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

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