8

UTF-8 文字を処理する Bison パーサーを作成しようとしています。パーサーに Unicode 文字の値を実際に解釈させたくはありませんが、UTF-8 文字列を一連のバイトとして解析させたいと考えています。

現在、Bison は問題のある次のコードを生成します。

  if (yychar <= YYEOF)
    {
      yychar = yytoken = YYEOF;
      YYDPRINTF ((stderr, "Now at end of input.\n"));
    }

問題は、UTF-8 文字列の多くのバイトが負の値を持つことであり、Bison は負の値を EOF として解釈し、停止します。

これを回避する方法はありますか?

4

3 に答える 3

8

bisonはい、 flexいいえ。UTF-8 でエンコードされたファイルを操作するために bison パーサーが必要になったとき、私は自分自身のyylex関数を作成することになりました。

編集: 手助けするために、 glibで利用可能な多くの Unicode 操作を使用しました(gunicode型といくつかのファイル/文字列操作関数があり、便利だと思いました)。

于 2009-06-01T14:50:01.537 に答える
4

flexここでの問題であるため、 を参照してくださいzlex

于 2009-06-01T15:00:49.877 に答える
0

これは 4 年前の質問ですが、私は同じ問題に直面しており、私の考えを共有したいと思います。

問題は、UTF-8 では読み取るバイト数がわからないことです。上で提案したように、独自のレクサーを使用して、行全体を読み取るか、毎回 4 バイトを読み取るようにすることができます。次に、そこから UTF-8 文字を抽出し、さらにバイトを読み取って、再び 4 バイトにします。

于 2013-07-20T09:38:20.127 に答える