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

时间:2019-04-09 10:12:47

标签: antlr antlr4

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

  1. 将我的输入转换为所有小写字母。对于某些人来说,这没有用 我语法的某些部分要求区分大小写。

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

我希望存在某种正则表达式技巧,或者是一个ANTLR标志,它告诉解析器以不同方式对待某些令牌。


一个例子:

SENSITIVETOKEN
:
    'footoken' 
;

INSENSITIVETOKEN
:
    'bootoken'  (some magic here)
;

词法分析器"BOOTOKEN"识别为INSENSITIVETOKEN
不是 "FOOTOKEN"SENSITIVETOKEN


感谢您的帮助! ^^

1 个答案:

答案 0 :(得分:1)

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

示例:

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')
;