2012-08-01 171 views
0

我寫在OCaml的詞法分析器對小語種的文字,我有它的語法的部分內容如下:代表詞法分析器

tab-character = %x0009 
eom-character = %x0019 
space-character = %x0020 
underscore = %x005F 
single-quote = %x0027 ; ' 

我嘗試在lexer.mlllet single_quote = [%x0027],但我得到一個非法編譯時出現字符錯誤,

誰能告訴我如何指定%x0027這樣的數字?

編譯的發言let single_quote = [''']的作品,我也看到了另一種方式來指定一個字符,例如let black = ['\009']

有誰知道是否有這3種方式有什麼區別?

回答

1

我想你在問OCaml中的字符文字。它們在Section 6.1 of the OCaml manual中定義。

對於單引號,您可以編寫'\'''\x27''\039'。所有這些都是相同的。所有字符文字都用單引號寫入 - 沒有以百分比開頭的表格(%)。

ocamllex中的正則表達式可以包含表示單個字符的字符文字(如上所述)或表示字符序列的字符串文字(用雙引號引起來)。字符串文字遵循與字符文字相同的模式。僅包含單引號的字符串將是"'""\'""\x27""\039"

我希望這會有所幫助。

編輯

是,['\x09']'\x09'"\x09"是相同的,當爲正則表達式考慮。其中有一件事的集合本身表示與那件事本身相同的事物。類似地,長度爲1的序列與僅有的一樣相同。

Unicode中的值0x3000表示一個「表意空間」(用於中文,日文和韓文,我猜)。在OCaml中處理Unicode是另一個話題。 OCaml有一個名爲Camomile的Unicode庫。我從來沒有用過它,但它從我看到的很好。我不認爲ocamllex適用於Unicode。只要快速搜索,我會看到一個名爲ulex的詞法生成器,它可以處理Unicode。有可能還有其他人,這只是谷歌命中率最高的。

(哎呦,我看到喬納森Protzenko已經建議荊。對不起,額外的噪音。)

+0

謝謝......我只是想確保'let a = ['\ x09']','讓a ='\ x09''和'讓a =「\ x09」'實際上是一樣的,對吧? – SoftTimur 2012-08-01 12:45:14

+0

另外,我已經看到'DBCS_whitespace =%\ x3000',但是'\ x3000'(以及'\ x2028','\ x2029')在OCaml中不存在,我怎麼能解決這個問題? – SoftTimur 2012-08-01 12:55:30

+0

(查看已添加的文本) – 2012-08-03 04:40:28