2012-12-09 24 views
1

我有以下定義指定一個詞法分析器:UTF-8法(柔性)

ws  [ \t\n]+ 
punc   (\.|\,|\!|\?) 
word  ({punc}|[a-zA-Z0-9])* 
special   (\%|\_|\&|\$|\#) 

我有我需要分析一些UTF-8的文件,自然它吹,當談到那些字符。我知道過去曾經有過幾次類似的問題,但他們沒有任何幫助。我試圖用this答案給出的方法,但我失敗了。我猜這個問題在上面的word的定義中?

如果有人可以提供關於在flex中使用UTF-8編碼的一般概念的詳細信息,那將非常有用。

+0

而..這是帶有「FLEX」標籤的問題19500。 GZ! :) –

+0

是的,這是由於Adobe爲它選擇一個名稱的產品,該產品已被使用(自1992年以來,IIRC) – wildplasser

+0

這聽起來很酷我想:d – hosolmaz

回答

2

嘗試(過程-with柔性-8):

%% 
ws  [ \t\n]+ 
punc   (\.|\,|\!|\?) 
word  ({punc}|[a-zA-Z0-9\x80-\xf3])* 
special   (\%|\_|\&|\$|\#) 

%% 

(編碼有點粗粒度...)由OP的文件檔案鏈接,導致Kaz's anwer更加準確,WRT允許的序列。

+0

我再次檢查輸出,並發現它居然給UTF- 8輸出在第一位。 (我被誤導了,因爲我的終端沒有utf-8支持)。然而unicode字符被當作單獨的單詞處理。如你所說的改變''字的定義解決了這個問題。順便說一句,xf3和xf4是否有區別? xf4保留供私人使用,而xf5 +無效,對吧? – hosolmaz

+0

我的Flex語法是有點生疏,我實際鍵入這個作爲一個猜測,但柔性*不*似乎有充分的8位支持。不是所有的字符(和序列)在0x7f之上都是有效的utf序列,你可能希望對你接受的東西更具限制性。 – wildplasser

+0

看看我在問題中鏈接的答案。我認爲他們通過修改無效間隔來實現這一目標?所以它會是''\ x80- \ xbf,\ xc2- \ xdf,\ xe0- \ xef,\ xf0- \ xf4''。你可以編輯你的答案,如果你喜歡 – hosolmaz