antlr - 不匹配的双 token

标签 antlr

在 ANTLR 中,我有一个具有以下定义的 MismatchedTokenException:

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

以及以下测试:

A<B,C<D>>

解析第一个>时发生异常。 ANTLR 尝试同时解析两个“>>”,但失败了。

使用静默空白 channel ,以下测试确实有效:

A<B,C<D> >

其中明确指示 ANTLR 单独处理每个标记。

我该如何解决这个问题?

最佳答案

我无法重现这一点。解析器生成:

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 wrote:

Got it. I had a << token defined. Quickly, is there a way to priorize token recognition over another?

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

关于antlr - 不匹配的双 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10374040/

相关文章:

java - 使用antlr指定基本监听器/访问者实现

java - 使用 ANTLR 识别 JavaScript 文件中的全局变量声明

java - 记录 antlr v3 解析器 Activity

eclipse - Eclipse中的ANTLR插件

c++ - ANTLR语法链接错误

java - 如何为 ANTLR 指定目标包?

ANTLR 相同解析器规则的零到多次出现

c# - 发现 op_Addition 或实现 Expression.Add 的方法

eclipse - 从语法构建符号表

java - 有没有办法可以修改 ParseTree 及其附带的 TokenStream?