2009-06-01 29 views
8

我正在嘗試製作一個Bison解析器來處理UTF-8字符。我不希望解析器實際解釋Unicode字符值,但我希望它將UTF-8字符串解析爲一個字節序列。野牛可以解析UTF-8字符嗎?

眼下,野牛生成以下代碼這是有問題:

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

的問題是,UTF-8字符串的許多字節將具有負值,和Bison解釋負值作爲EOF,並停下來。

有沒有辦法解決這個問題?

回答

8

bison是,flex沒有。有一次,我需要一個野牛解析器來處理UTF-8編碼文件,我最終編寫了我自己的yylex函數。

編輯:爲了幫助,我用了很多可用的Unicode操作的glib(有一個gunicode類型,我發現一些有用的文件/字符串處理函數)。

+0

那麼,我的詞法分析器處理UTF-8字符就好了,但Bison解析器只要看到一個負值就會停止解析。請指教。 – 2009-06-01 14:52:16

+0

你一次讀取1個字節的文件嗎?或一次utf-8編碼的字符? – eduffy 2009-06-01 14:53:41

+0

一次1個字節。 – 2009-06-01 14:59:29

4

flex成爲問題在這裏,你可能想看看zlex

0

這是4年前的一個問題,但我面臨同樣的問題,我想分享我的想法。

問題是,在UTF-8中,您不知道要讀取多少個字節。如上所示,您可以使用您自己的詞法分析器,並讓它讀取整行,或者每次讀取4個字節。然後從中提取UTF-8字符,並讀取更多字節以再次完成4個字節。