antlr4:如何使标识符不区分大小写

时间:2018-07-29 09:00:41

标签: antlr antlr4

缺陷是我DSL中的一个关键字,我想使关键字不区分大小写。

我已阅读此文档并尝试。 https://github.com/antlr/antlr4/blob/master/doc/case-insensitive-lexing.md

在我的语法中,我有两个基本规则:matching_rule_not_work和matching_rule_will_work。第一条规则是我想要的,但是没有用。第二条规则有效,但这并不区分大小写。

那么,如何使第一条规则生效?谢谢

enter image description here

grammar test;

matching_rule_not_work: K_DEFICIENCY;

matching_rule_will_work: 'deficiency';

WS : [ \t\r\n]+ -> skip;


K_DEFICIENCY: D E F I C I E N C Y;

fragment A : [aA];
fragment B : [bB];
fragment C : [cC];
fragment D : [dD];
fragment E : [eE];
fragment F : [fF];
fragment G : [gG];
fragment H : [hH];
fragment I : [iI];
fragment J : [jJ];
fragment K : [kK];
fragment L : [lL];
fragment M : [mM];
fragment N : [nN];
fragment O : [oO];
fragment P : [pP];
fragment Q : [qQ];
fragment R : [rR];
fragment S : [sS];
fragment T : [tT];
fragment U : [uU];
fragment V : [vV];
fragment W : [wW];
fragment X : [xX];
fragment Y : [yY];
fragment Z : [zZ];

1 个答案:

答案 0 :(得分:2)

在您的示例中,您同时使用K_DEFICIENCY和文字'deficiency'。在解析器规则中使用文字与为该文字定义令牌规则相同,后者位于所有其他令牌规则之前。

因此,您有两种令牌:K_DEFICIENCY令牌和'deficiency'令牌。当词法分析器看到可以同时匹配两者的输入时,将使用第一个输入,即'deficiency',因为正如我所说,文字总是始终排在第一位。

如果您从语法中删除matching_rule_will_work: 'deficiency';行,它将像您期望的那样工作。