繁体   English   中英

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 ,它不是三个“常量”,而是三个单独的标记:一个标识符,一个等于标识符和一个标识符。 我似乎无法弄清楚我在做什么错。 也许我应该回到使用Haskell的Parsec库。 (我停止使用它的原因是一个很长的故事。)

它们是3个令牌,因为您之间有空格。 当您执行X::=1 ,它最终将作为单个Constant令牌。

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

您的固定规则应该是解析器规则,这样就不会有任何问题。 创建1个单个常量令牌没有多大意义。 因此,大概应该是您的表达规则。 标记(词法器规则)是语言的基本组成部分。 就像化学中的原子。 解析器规则(小写规则)用于将这些令牌粘合在一起。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM