Xtext:如何测试 xtext 词法分析器?

Xtext: How do test the xtext lexer?

我的 Xtext 语法中有一个终端列表,我如何测试它们是否有效并且没有令牌冲突?

例如以下终端:

terminal COMMA: ',';
terminal QUESTION: '?';
terminal IDENTIFIER: ('a'..'z'| 'A'..'Z')+;
terminal LENGTH: 'LENGTH' | 'l' | 'len';
terminal SEMICOLON: ';' ;

我想确保 IDENTIFIERLENGTH 不会相互冲突,因此 LENGTH 或 len 给出的标记是 LENGTH 而不是 IDENTIFIER。 (假设首先定义的标记优先,上面的语法是错误的)

当我尝试你的例子并生成语言时,Antlr 会报告标记冲突。

如果将 Provider 注入到测试中,则可以很容易地设置专用的词法分析器测试。您可能还想查看 xtext-utils ,不幸的是,它似乎不再被维护。但是 wiki 仍然对测试的外观有一些了解。