我的语法有效,但关键字必须是大写。有没有办法对所有关键词进行霰弹,以便小写等价物不会被拒绝?如果没有,我如何单独影响他们?
答案 0 :(得分:2)
我不建议使用转换大小写的输入流来使关键字识别不区分大小写。这样的流将转换所有内容,字符串,注释等,即使这完全浪费了CPU周期。更好的方法是在语法中明确告诉您(仅)某些关键字区分大小写。语法很简单:
fragment A: [aA];
fragment B: [bB];
...
fragment Z: [zZ];
KEYWORD1: K E Y W O R D '1';
...
这些规则的ATN只是稍微复杂一些(每个字母使用2个间隔而不是1个,这比(总体而言)快于案例转换):
例如字母S:
每个节点都是ATN模拟器必须走的步骤来解析规则。边缘标签是匹配的符号,允许这种转换(ɛ是epsilon转换,即无输入消耗的无条件步骤)。