不匹配的双令牌

时间:2012-04-29 17:01:51

标签: antlr

在ANTLR中,我有MismatchedTokenException,其定义如下:

type : IDENTIFIER ('<' (type (',' type)*) '>')?;

以下测试:

A<B,C<D>>

解析第一个>时发生异常。 ANTLR尝试解析'&gt;&gt;'马上就失败了。

使用静默空白频道,以下测试 工作:

A<B,C<D> >

明确指示ANTLR分别处理每个令牌。

我该如何解决?

1 个答案:

答案 0 :(得分:2)

我无法重现。解析器由:

生成
grammar T;

type       : IDENTIFIER ('<' (type (',' type)*) '>')?;
IDENTIFIER : 'A'..'Z';

将输入A<B,C<D>>(不带空格)解析为以下解析树:

enter image description here

您需要提供导致此输入生成MismatchedTokenException的语法。

也许您正在使用ANTLRWorks的解释器(或Eclipse的ANTLR-IDE,它使用相同的解释器)?在这种情况下, 可能是问题所在:它是出了名的错误。不要使用它,但使用ANTLRWorks的调试器:它很棒(上面发布的图像来自调试器)。

  

Lazlo Bonin 写道:

     

知道了。我有一个&lt;&lt;令牌定义。很快,有没有办法将令牌识别优先于另一个?

不,词法分析器只是尝试尽可能匹配。因此,如果它可以创建匹配<<(或>>)的令牌,那么它将支持两个单<(或>)令牌。只有当两个(或更多)词法分析器规则匹配相同数量的字符时,才会进行优先级排序:首先定义的规则将“胜过”语法中稍后定义的规则。