在ANTLR 4.6和更早下面的代碼工作正常:的正確實施和使用自定義字符與ANTLR流> = 4.7
String code = readFile(args[0]);
ANTLRCustomStream codeStream = new ANTLRCustomStream(code);
MyLexer lexer = new MyLexer(codeStream);
我使用CaseInsensitiveInputStream.java對焦炭的情況下通過的ANTLRCustomStream
方式忽略。
但是,如何在版本4.7和更高版本的ANTLR中使用不區分大小寫的輸入流? ANTLRInputStream
已被棄用,我不想使用它。
CharStream codeStream = CharStreams.fromFileName(args[0]);
// customCharStream here
MyLexer lexer = new MyLexer(customCharStream);
由於以下原因,不區分大小寫的片段不合適: 1.它們比普通標記(abc:'abc')慢,請參閱@ jim-idle [忽略大小寫新語法問題的評論](https: //github.com/antlr/antlr4/issues/1002#issuecomment-141955368)。 2.在大多數情況下的「大街」改造將不會因爲有問題「的消息和其他'的getText()'方法從原始輸入字符串返回數據」(見@ SAM-哈韋爾[這裏評論](HTTPS ://gist.github.com/sharwell/9424666#gistcomment-1186748))。而「Straße」不能是關鍵字(通常這是一個字符串文字)。 –
你似乎對不區分大小寫的問題已經:-)工作了相當長的一段時間'Straße'例如:我想做的與顯示是由於較低的焦炭數量的變化或上蓋的問題,這使得不區分大小寫由較低的套管比較如此不可靠。這可能適用於ANSI輸入,但不是完整的Unicode。您真正需要的是在這裏進行案例摺疊(以及在我們使用時進行規範化)。 –