1

xtext 词法分析器可以发出它无法识别为特殊标记的任何内容吗?喜欢

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 会在这种错字上失败,并且在那之后的所有解析都失败。如果有另一个可以避免解析失败,那么我不需要容易使用这个错误并且看起来很愚蠢的方法来解决这个问题。

4

1 回答 1

1

我发现只需使用ID输入流中的其他垃圾就可以了。

terminal USE: 'use';
terminal SELECT: 'select';
       ...
terminal TYPO: ID;

所以如果我有us e,us将被解析为ID; 如果我有useuse将被解析为USE. 终端令牌的顺序很重要。

于 2013-09-20T04:28:50.737 回答