2009-04-20 5 views
3

私はJavaCCを使って文法を作成していますが、小さな問題を抱えています。私はASCII拡張セット内の任意の有効な文字を結果のコンパイラによって認識されるようにすることを試みています。同じJavaCCの例(JavaCCの文法そのものを示す主な例)を見た後、私は私の文字を認識するために、次のトークンを設定します。JAVACCを使った拡張文字の認識

< CHARACTER: 

    ( (~["'"," ","\\","\n","\r"]) 
    | ("\\" 
     (["n","t","b","r","f","\\","'","\""] 
     | ["0"-"7"] (["0"-"7"])? 
     | ["0"-"3"] ["0"-"7"] ["0"-"7"] 
     ) 
    ) 
) 

> 

私はそれが進表現に一致する必要がありますこれを正しく理解していた場合すべてのASCII文字のうち、0〜377(拡張ASCIIセットのすべての256文字をカバーします)。これは、すべてのキーボード文字(a〜z、0〜9、?、。/ etc)、およびほとんどの特殊文字(©、¬ ®)でも期待通りに機能します。 しかし、私は '商標'シンボル(™)を解析しようとするたびに、パーサーはシンボルを認識できないことを示すファイルの終了例外を常にスローします。商標シンボルを受け入れるためのキャラクターの定義を強化することができる明確な方法はありますか?

答えて

1

私が文法を欲しかったのは、ASCII文字ではなく有効なすべてのUnicode文字を受け入れることでした。™シンボルはUnicode仕様の一部であり、ASCII拡張文字セットではありません。以下のとおり、私の問題を解決して有効な文字のための私のトークンを変更する:(format- U + 00FFの有効なUnicodeである)私は、テキストファイルの特殊記号を認識するため、同様の問題があった

< CHARACTER:( (~["'"," ","\\","\n","\r"]) 
| ("\\" 
    (["n","t","b","r","f","\\","'","\""] 
    | ["u","U"]["+"]["0"-"9","a"-"f","A"-"F"]["0"-"9","a"-"f","A"-"F"]["0"-"9","a"-"f","A"-"F"]["0"-"9","a"-"f","A"-"F"] 
    ) 
))> 
0

(いずれかCP1252またはISO-8859-1でエンコードされています)。私のソリューションは、文法ヘッダにUNICODE_INPUTを追加しました:

options { 
    UNICODE_INPUT=true; 
} 

そよ風のように働きました。

JavaCCオプションの詳細:http://javacc.java.net/doc/javaccgrm.html

関連する問題