ANTLRとストリーム以前の次のコードが正常に動作:適切な実装及び使用はANTLR 4.6> = 4.7
String code = readFile(args[0]);
ANTLRCustomStream codeStream = new ANTLRCustomStream(code);
MyLexer lexer = new MyLexer(codeStream);
Iは、ANTLRCustomStream
の方法によって無視チャー場合についてCaseInsensitiveInputStream.javaを使用します。
しかし、バージョン4.7以降のANTLRでは、大文字と小文字を区別しない入力ストリームをどのように使用できますか? ANTLRInputStream
は推奨されておらず、使用したくありません。
CharStream codeStream = CharStreams.fromFileName(args[0]);
// customCharStream here
MyLexer lexer = new MyLexer(customCharStream);
大文字小文字を区別しない断片は、以下の理由により適切ではありません:(:「ABC」ABC)、(HTTPSをジム・アイドル[ケース新しい構文の問題を無視へのコメント] @見 1.彼らは普通のトークンよりも遅いです。 //github.com/antlr/antlr4/issues/1002#issuecomment-141955368)。 2. "Straße"の変換は、 "メッセージングや他の' getText() 'メソッドが元の入力文字列からデータを返すため問題にはなりません"(@ sam-harwell [comment here] ://gist.github.com/sharwell/9424666#gistcomment-1186748))。 "Straße"はキーワードではありません(一般的に文字列リテラルです)。 –
あなたはかなりの時間、このケースの不感症の問題に取り組んでいるようです:-) 'Straße'の例:これは、大文字小文字の違いによる文字数の変化の問題です。大文字小文字を区別しません下部ケーシングによる比較は信頼性が低い。これはANSI入力では機能しますが、完全なUnicodeでは機能しません。あなたが本当に必要とするのは、ここで大文字小文字の折りたたみ(正規化)です。 –