antlr4:如何使标识符不区分大小写
antlr4: how to make identifier case insensitive
不足之处是我的DSL中的关键字,我想让关键字不区分大小写。
我已阅读此文档并尝试。 https://github.com/antlr/antlr4/blob/master/doc/case-insensitive-lexing.md
在我的语法中,我有两个基本规则:matching_rule_not_work 和 matching_rule_will_work。第一条规则是我想要的,但它没有用。第二条规则有效,但这不区分大小写。
那么,如何让第一条规则生效呢?谢谢
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];
在您的示例中,您同时使用了 K_DEFICIENCY
和文字 'deficiency'
。在解析器规则中使用文字与为该文字定义标记规则相同,后者位于所有其他标记规则之前。
因此您有两种令牌:K_DEFICIENCY
令牌和 'deficiency'
令牌。当词法分析器看到可以同时匹配两者的输入时,将使用最先出现的输入,这将是 'deficiency'
因为,正如我所说,文字总是最先出现的。
如果您从语法中删除 matching_rule_will_work: 'deficiency';
行,它会像您期望的那样工作。
不足之处是我的DSL中的关键字,我想让关键字不区分大小写。
我已阅读此文档并尝试。 https://github.com/antlr/antlr4/blob/master/doc/case-insensitive-lexing.md
在我的语法中,我有两个基本规则:matching_rule_not_work 和 matching_rule_will_work。第一条规则是我想要的,但它没有用。第二条规则有效,但这不区分大小写。
那么,如何让第一条规则生效呢?谢谢
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];
在您的示例中,您同时使用了 K_DEFICIENCY
和文字 'deficiency'
。在解析器规则中使用文字与为该文字定义标记规则相同,后者位于所有其他标记规则之前。
因此您有两种令牌:K_DEFICIENCY
令牌和 'deficiency'
令牌。当词法分析器看到可以同时匹配两者的输入时,将使用最先出现的输入,这将是 'deficiency'
因为,正如我所说,文字总是最先出现的。
如果您从语法中删除 matching_rule_will_work: 'deficiency';
行,它会像您期望的那样工作。