2017-01-28 28 views
0

这里是我的语法。Lexer优先空间

grammar MainGrammar; 

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

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

我尝试为主要治MainFile代码

def 123456 

只匹配文本句子令牌并没有找到KEYWORD令牌。不管令牌的顺序如何。

有什么想法?

回答

0

你的问题是你跳过WSNL。因此解析器甚至不会看到相应的令牌。这就是为什么它不能匹配它们(它们不是输入解析器的TokenStream的一部分)。

为了解决这个问题,你可能会看看词汇模式或this question