Unicode をサポートする小さな DSL 用の antlr3 文法を作成しようとしています (ドイツ語のウムラウト äöüÄÖÜß に必要) が、うまく動作しないようです。
"xay" (問題なく動作する) や "xäy" (動作しない) など、Unicode 文字の任意のシーケンスに一致するはずの最小限のテスト文法を作成しました。
文法は次のとおりです。
grammar X;
@lexer::header {
import org.antlr.runtime.ANTLRInputStream;
import org.antlr.runtime.ANTLRStringStream;
import org.antlr.runtime.CommonTokenStream;
import java.io.ByteArrayInputStream;
import java.io.IOException;
}
@lexer::members {
public static void main(String[] args) throws Exception {
ANTLRInputStream stream = new ANTLRInputStream( new ByteArrayInputStream("x\u00C4y".getBytes()), "utf-8");
XLexer lex = new XLexer(stream);
CommonTokenStream c = new CommonTokenStream(lex);
XParser p = new XParser(c);
p.x();
}
}
x : UTF8+;
UTF8 : ('\u0000'..'\uF8FF');
「xäx」の場合、次のエラーが表示されます。
line 1:1 mismatched character '?' expecting set null
私は何が欠けていますか?
ありがとう!