ANTLR 使特定的令牌或规则不区分大小写

ANTLR Make specific token or rule case insensitive

我正在寻找一种方法使我的 ANLTR 解析器中的某些特定标记不区分大小写。 我已经尝试过的:

  1. 正在将我的输入转换为全部小写。这对某些人不起作用 我的部分语法需要区分大小写。

  2. 保存令牌的大写和小写版本。这也不起作用,因为这样我的词法分析器文件变得太大(打破了 ANTLR 的 64k 限制)。

我希望存在的是一些正则表达式技巧,或者可能是一个 ANTLR 标志,告诉解析器以不同方式处理某些标记。


一个例子:

SENSITIVETOKEN
:
    'footoken' 
;

INSENSITIVETOKEN
:
    'bootoken'  (some magic here)
;

词法分析器 应该"BOOTOKEN" 识别为 INSENSITIVETOKEN
但是 不是 "FOOTOKEN" 因为 SENSITIVETOKEN


感谢您的帮助! ^^

一种可能的解决方案是声明一个字母的片段并根据这些片段构建标记。

示例:

INSENSITIVETOKEN
:
    B O O T O K E N
;

fragment B: ('B'|'b');
fragment O: ('O'|'o');
fragment T: ('T'|'t');
fragment K: ('K'|'k');
fragment E: ('E'|'e');
fragment N: ('N'|'n');

或者,如果不区分大小写的标记不多,只需:

INSENSITIVETOKEN
:
    ('B'|'b')('O'|'o')('O'|'o')('T'|'t')('O'|'o')('K'|'k')('E'|'e')('N'|'n')
;