ASCII ファイルを解析する xml パーサーを作成しましたが、UTF-8 でエンコードされたファイルを読み取れるようにする必要があります。lexに次の正規表現がありますが、UTF-8 と一致しません。何が間違っているのかわかりません:
utf_8 [\x00-\xff]*
bom [\xEF\xBB\xBF]
それから:
bom { fprintf( stderr, "OMG I SAW A BOM"); return BOM;}
utf_8 { fprintf( stderr, "OMG I SAW A UTF CHAR", yytext[0] ); return UTF_8;}
次の文法規則もあります。
program
: UTF8 '<' '?'ID attribute_list '?''>'
root ...
どこにUTF8
ある:
UTF8
: BOM {printf("i saw a bom\n");}
| UTF_8 {printf("i saw a utf\n");}
| {printf("i didn't see anything.'\n");}
;
私のパーサーはi didn't see anything
ASCIIファイルに対して動作します。つまり、XML UTF-8ファイルを空のドキュメントにコピーして貼り付けます。
どんな助けでも大歓迎です。
編集:
参照用にトリミングされた .l ファイルを次に示します。
%{
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "y.tab.h"
int lines = 1;
%}
utf_8 [\x0000-\xffff]*
bom [\xEF\xBB\xBF]
whitespace [ \t]
ev (.|{bom})
ev1 (.|{utf_8})
%%
{whitespace} { fprintf( stderr, "%s", yytext );}
\n { fprintf( stderr, "%s%d ", yytext, lines++ );}
. { fprintf( stderr, "{TOKEN:%c}", yytext[0] ); return yytext[0];}
bom { fprintf( stderr, "OMG I SAW A BOM"); return BOM;}
utf_8 { fprintf( stderr, "OMG I SAW A UTF CHAR", yytext[0] ); return UTF_8;}
%%
void error( char *message )
{
fprintf( stderr, "Error: %s\n", message );
exit(1);
}