4

JavaCC を使用して文法を作成していて、小さな問題に遭遇しました。ASCII 拡張セット内の有効な文字が結果のコンパイラによって認識されるようにしようとしています。同じ JavaCC の例 (主に JavaCC Grammer 自体を示す例) を見た後、自分の文字を認識するために次のトークンを設定しました。

< CHARACTER:

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

>

私がこれを正しく理解していれば、0 から 377 までのすべての ASCII 文字の 8 進表現で一致するはずです (拡張 ASCII セットの 256 文字すべてをカバーします)。これは、すべてのキーボード文字 (az、0-9、?、./ など) およびほとんどの特殊文字 (©、¬ ®) に対して期待どおりに機能します。しかし、「商標」記号 (™) を解析しようとすると、パーサーはファイルの終わりの例外をスローし続け、記号を認識できないことを示します。商標記号が受け入れられるように、キャラクターの定義を強化できる明らかな方法はありますか?

4

2 に答える 2

2

解析前に文字列に読み取られたテキスト ファイル (CP1252 または ISO-8859-1 エンコード) の特殊なシンボルを認識するために、同様の問題がありました。UNICODE_INPUT私の解決策は、文法ヘッダーに追加することでした:

options {
  UNICODE_INPUT=true;
}

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

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

于 2011-12-07T14:10:19.253 に答える