在ANTLR 4中,我尝试解析一个文本文件,但是我的一些定义的标记经常被忽略而不利于其他标记。我制作了一个小例子来说明我的意思:
要解析的文件:
hello world
hello world
语法:
grammar TestLexer;
file : line line;
line : 'hello' ' ' 'world' '\n';
LINE : ~[\n]+? '\n';
ANTLR书解释说'hello'将成为隐式令牌,它位于LINE令牌之前,并且令牌顺序很重要。所以我希望解析器不会与LINE令牌匹配,但它确实如此,因为结果树显示:
我该如何解决这个问题,以便获得实际的隐式令牌?
顺便说一下。我还尝试在LINE之前编写显式令牌,但这并没有改变任何东西。
答案 0 :(得分:2)
自己找到它:
似乎ANTLR首先选择最长的令牌。 因此,由于LINE总是匹配整行,所以总是首选。
要在语法中包含一些“小丑”标记,它应该是单个符号。 在我的情况下
grammar TestLexer;
file : line line;
line : 'hello' ' ' 'world' '\n';
LINE : ~[\n];
会起作用。