如何将语法中的所有关键字设置为接受现有语法中的大写和小写?

时间:2017-12-14 17:59:05

标签: parsing antlr grammar antlr4

我的语法有效,但关键字必须是大写。有没有办法对所有关键词进行霰弹,以便小写等价物不会被拒绝?如果没有,我如何单独影响他们?

1 个答案:

答案 0 :(得分:2)

我不建议使用转换大小写的输入流来使关键字识别不区分大小写。这样的流将转换所有内容,字符串,注释等,即使这完全浪费了CPU周期。更好的方法是在语法中明确告诉您(仅)某些关键字区分大小写。语法很简单:

fragment A: [aA];
fragment B: [bB];
...
fragment Z: [zZ];

KEYWORD1: K E Y W O R D '1';
...

这些规则的ATN只是稍微复杂一些(每个字母使用2个间隔而不是1个,这比(总体而言)快于案例转换):

enter image description here

例如字母S:

enter image description here

每个节点都是ATN模拟器必须走的步骤来解析规则。边缘标签是匹配的符号,允许这种转换(ɛ是epsilon转换,即无输入消耗的无条件步骤)。