xtext lexer可以发出无法识别为特殊标记的内容吗?像
terminal USE: 'use';
terminal SELECT: 'select';
terminal OTHER_KEYWORDS: /* not 'use' nor 'select' */;
我写的语法就像
terminal fragment A: 'a' | 'A';
...
terminal fragment Z: 'z' | 'Z';
terminal fragment LETTER: 'a'..'z' | 'A'..'Z';
terminal fragment A_: 'b'..'z' | 'B'..'Z';
...
terminal fragment Z_: 'a'..'y' | 'A'..'Y';
terminal fragment SU_: 'a'..'r' | 't' | 'v'..'z' | 'A'..'R' | 'T' | 'V'..'Z';
terminal OTHER_KEYWORDS:
SU_ LETTER* |
U S_ LETTER* |
U S E_ LETTER* |
S E_ LETTER* |
S E L_ LETTER* |
S E L E_ LETTER* |
S E L E C_ LETTER* |
S E L E C T_ LETTER*
;
我想这样做的原因是因为antlr会在那种拼写错误中失败并且在此之后所有解析都失败了。如果有另一个可以避免解析失败,那么我不需要使用这个容易出错的错误,并且看起来很愚蠢。
答案 0 :(得分:1)
我发现只使用ID
来消耗输入流中的其他垃圾就可以了。
terminal USE: 'use';
terminal SELECT: 'select';
...
terminal TYPO: ID;
因此,如果我有us e
,us
将被解析为ID
;如果我有use
,则use
将被解析为USE
。终端令牌的顺序很重要。