1 解决方案
构建词法规则支持大小写不敏感
易读,但是难写且效率低
词法解析前全部转换为大写
高效,但需要注意不要转换字符串和注释
讨论详见detail。
2 大小写不敏感规则
1 | # 匹配update中任意字符大小写 |
可直接复用的片段:
1 | fragment A : [aA]; // match either an 'a' or 'A' |
3 提前转换
以下示例需要提前转换为大写:
1 | K_UPDATE : 'UPDATE'; |
Java语言使用示例:
1 | CharStream s = CharStreams.fromPath(Paths.get('test.sql')); |
其中,各语言使用CaseChangingCharStream示例: