Antlr 坚持认为丢失了一个令牌,尽管它似乎没有丢失

Antlr insists a token is missing although it appears to not be missing

只是尝试了一下 Antlr,我 运行 遇到了一个我不太明白的错误

grammar Input;

start   : cityLink*;
cityLink : CityName DASH CityName (NEWLINE | EOF);

CityName          : [A-Z] Word?;
Word              : [a-z]+;
DASH              : WS '-' WS -> skip;
WS                : ' '+ -> skip;
NEWLINE           : '\r'? '\n' -> skip;

我正在尝试解析

Chicago - Naperville

这似乎应该有效,输出是正确的,错误消息是:

line 1:10 missing DASH at 'Naperville'

我很不明白为什么我会收到这条消息,我一直在阅读有关最大词法分析器匹配规则的文档,但我似乎无法在这里发现我的问题。欢迎任何意见。

您已使用 skip 标记 DASH 规则,因此 DASH 令牌不会出现在令牌流中。如果你想在你的语法中使用 DASH,你不应该跳过它。