3

識別に 4 桁以上の 16 進数が必要なコード ポイントを持つ Unicode 文字間の範囲の字句解析規則を定義したいと考えています。具体的には、次のルールを宣言したいと思います。

ID_Continue : [\uE0100-\uE01EF] ;

残念ながら、うまくいきません。このルールは、この範囲にない文字と一致します。(これがどのような正確な動作をもたらすかはわかりませんが、私が望むものではありません。)次のことも試しました(先行ゼロでパディングし、8桁を使用します):

ID_Continue : [\U000E0100-\U000E01EF] ;

しかし、それは同じ望ましくない動作をもたらすようです。

テスト用にAntlr4とIntelliJプラグインを使用しています。

Antlr4 は上記の Unicode リテラルをサポートしていません\uFFFFか?

4

2 に答える 2

0

注: BMP に対する制限は、純粋に Java の制限です。他のターゲットはさらに先に進む可能性があります。たとえば、ANTLR3 (C ターゲット) 用に記述された私の MySQL grammarは、BMP を超えた絵文字などを簡単にレックスできます。これは、引用符で囲まれた文字列と IDENTIFIER に対して機能します。

ここに画像の説明を入力

ただし、ここで少し奇妙なのは、文法でその範囲を指定していないことです (BMP のみを使用します)。それでも、パーサーは任意の utf-8 入力を解析できます。ターゲットランタイムのバグかもしれませんが、存在することを嬉しく思います:-D

于 2016-03-12T10:21:44.780 に答える