[英]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
,它不是三个“常量”,而是三个单独的标记:一个标识符,一个等于标识符和一个标识符。 我似乎无法弄清楚我在做什么错。 也许我应该回到使用Haskell的Parsec库。 (我停止使用它的原因是一个很长的故事。)
它们是3个令牌,因为您之间有空格。 当您执行X::=1
,它最终将作为单个Constant
令牌。
您可能定义了一个词法分析器规则,该规则会跳过空格字符,但这只会导致解析器从不看到这些空格字符,而不会看到词法分析器。
您的固定规则应该是解析器规则,这样就不会有任何问题。 创建1个单个常量令牌没有多大意义。 因此,大概应该是您的表达规则。 标记(词法器规则)是语言的基本组成部分。 就像化学中的原子。 解析器规则(小写规则)用于将这些令牌粘合在一起。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.