Lexer优先考虑空间

时间:2017-01-28 18:49:17

标签: java antlr antlr4

这是我的语法。

grammar MainGrammar;

mainFile: statement*;
statement: stackStatement NL;
stackStatement: KEYWORD WS INT;

INT: [0-9]+;
KEYWORD: 'def';
SENTENCE: (~[\r\n@:=])+;
WS: [ \t]+ -> skip;
NL: '\r'? '\n' -> skip;

我尝试使用主要规则 MainFile 代码

def 123456

仅将文字与 SENTENCE 标记匹配,并且找不到 KEYWORD 标记。无论令牌的顺序如何。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您的问题是您正在跳过WSNL。因此,解析器甚至看不到相应的标记。这就是它无法匹配的原因(它们不是输入解析器的TokenStream的一部分)。

为了解决此问题,您可以查看词汇模式或this question