2017-09-11 11 views
0

私の文法は単純ですが、連結を作るためにいくつかの文字列を受け入れる必要があります。この式は有効である必要があります。ANTLR文法:CP1252ユーロ文字を理解してください

CONCATENATE(10;" €") 

問題はユーロ記号です。

fragment SPECIAL  : '\u00B0'; 

しかし、ユーロ記号は、この度のシンボルのように動作していない:私は作成しています

fragment SPECIAL  : '\u00B0' | '\u20AC' 

私は、これは程度のシンボルのための非常に良い仕事をしていた、私の文法にするために使用されるが、このANTLR 3.4および生成された字句解析コードでPHPパーサは度記号については、以下である:

$this->getToken('176')== $LA26 || ... 

そして、それは広告これはユーロ記号のために、私はそこに(手動パーサ生成した後、それを追加する必要がある場合それを追加する2つの場所です)、それは動作します!

$this->getToken('128')== $LA26 || ... 

私の質問は次のとおりです。このコード生成を得るには文法でどのように追加するのですか?このユニコードシンボルの範囲には、u00よりも何らかのwlseで始まる問題がありますか?他のすべての特殊文字は¥u00で始まっています。

ありがとうございました。 よろしくお願いいたします。 Nicolas。

+0

UTF-8としてすべてのエンコードをエンコードしてください! – delboy1978uk

+0

トローリングを止めてください、antlr phpはutf8をサポートしていません –

+0

ああ!本当に?!すべての私の友人にトローリングはありません! – delboy1978uk

答えて

1

パーサーがCP1252入力を使用している場合、どのようにUnicodeコードポイントに関して定義されたトークンで動作すると思いますか?

入力がCP1252の場合、その文字セットのコードポイントを使用する必要があります。 CP1252のユーロ記号には\u0080を使用してください。

+0

私は0080を試してみます。しかし、ユニコードポイントを渡すとu00B0度または数のシンボルのために働くの問題がどこにあるか、私は把握できない理由...それはだ... –

+1

0xB0が理由かもしれないUnicodeとCP1252の両方の学位のためのコード・ポイント、です。 –

関連する問題