这是我的语法。
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 标记。无论令牌的顺序如何。
有什么想法吗?
答案 0 :(得分:0)
您的问题是您正在跳过WS
和NL
。因此,解析器甚至看不到相应的标记。这就是它无法匹配的原因(它们不是输入解析器的TokenStream
的一部分)。
为了解决此问题,您可以查看词汇模式或this question