在ANTLR中,我有MismatchedTokenException
,其定义如下:
type : IDENTIFIER ('<' (type (',' type)*) '>')?;
以下测试:
A<B,C<D>>
解析第一个>
时发生异常。 ANTLR尝试解析'&gt;&gt;'马上就失败了。
使用静默空白频道,以下测试 工作:
A<B,C<D> >
明确指示ANTLR分别处理每个令牌。
我该如何解决?
答案 0 :(得分:2)
我无法重现。解析器由:
生成grammar T;
type : IDENTIFIER ('<' (type (',' type)*) '>')?;
IDENTIFIER : 'A'..'Z';
将输入A<B,C<D>>
(不带空格)解析为以下解析树:
您需要提供导致此输入生成MismatchedTokenException
的语法。
也许您正在使用ANTLRWorks的解释器(或Eclipse的ANTLR-IDE,它使用相同的解释器)?在这种情况下, 可能是问题所在:它是出了名的错误。不要使用它,但使用ANTLRWorks的调试器:它很棒(上面发布的图像来自调试器)。
Lazlo Bonin 写道:
知道了。我有一个&lt;&lt;令牌定义。很快,有没有办法将令牌识别优先于另一个?
不,词法分析器只是尝试尽可能匹配。因此,如果它可以创建匹配<<
(或>>
)的令牌,那么它将支持两个单<
(或>
)令牌。只有当两个(或更多)词法分析器规则匹配相同数量的字符时,才会进行优先级排序:首先定义的规则将“胜过”语法中稍后定义的规则。