Antlr4忽略了令牌

时间:2014-10-25 20:54:27

标签: token grammar antlr4 lexer

在ANTLR 4中,我尝试解析一个文本文件,但是我的一些定义的标记经常被忽略而不利于其他标记。我制作了一个小例子来说明我的意思:

要解析的文件:

hello world
hello world

语法:

grammar TestLexer;

file : line line;
line : 'hello' ' ' 'world' '\n';

LINE : ~[\n]+? '\n';

ANTLR书解释说'hello'将成为隐式令牌,它位于LINE令牌之前,并且令牌顺序很重要。所以我希望解析器不会与LINE令牌匹配,但它确实如此,因为结果树显示:

Unexpected Result

我该如何解决这个问题,以便获得实际的隐式令牌?

顺便说一下。我还尝试在LINE之前编写显式令牌,但这并没有改变任何东西。

1 个答案:

答案 0 :(得分:2)

自己找到它:

似乎ANTLR首先选择最长的令牌。 因此,由于LINE总是匹配整行,所以总是首选。

要在语法中包含一些“小丑”标记,它应该是单个符号。 在我的情况下

grammar TestLexer;

file : line line;
line : 'hello' ' ' 'world' '\n';

LINE : ~[\n];

会起作用。