2
我目前正在爲我在Haskell編寫的基本編譯器製作掃描器。其中一個要求是,用單引號(')括起來的任何字符都被轉換爲字符文字標記(類型T_Char),並且這包括轉義序列,如'\ n'和'\ t'。我定義掃描功能,在大多數情況下工作好,這部分:Haskell:解析單引號中的轉義字符
scanner ('\'':cs) | (length cs) == 0 = error "Illegal character!"
| head cs == '\\' = mkEscape (head (drop 1 cs)) : scanner (drop 3 cs)
| head (drop 1 cs) == '\'' = T_Char (head cs) : scanner (drop 2 cs)
where
mkEscape :: Char -> Token
mkEscape 'n' = T_Char '\n'
mkEscape 'r' = T_Char '\r'
mkEscape 't' = T_Char '\t'
mkEscape '\\' = T_Char '\\'
mkEscape '\'' = T_Char '\''
然而,這出現在當我在GHCI運行:
Main> scanner "abc '\\' def"
[T_Id "abc", T_Char '\'', T_Id "def"]
它可以識別一切,但得到逃脫的反斜槓與逃脫的單引號混淆。這與字符編碼有關嗎?
我明白了。這是否意味着在閱讀文件而不是使用解釋器時它可以正常工作? – benwad 2010-02-15 13:28:50
@benwad:是的。 _ – kennytm 2010-02-15 13:31:17