我正在用haskell写一个词法分析器。这是代码:
lexer :: String -> [Token]
lexer s
| s =~ whitespace :: Bool =
let token = s =~ whitespace :: String in
lex (drop (length token) s)
| s =~ number :: Bool =
let token = s =~ number :: String in
Val (read token) : lex (drop (length token) s)
| s =~ operator :: Bool =
let token = s =~ operator :: String in
Oper token : lex (drop (length token) s)
| otherwise = error "unrecognized character"
where
whitespace = "^[ \t\n]"
number = "^[0-9]*(\.[0-9]+)?"
operator = "^[+-*/()]"
data Token = Val Int | Oper String
我有两个问题。一、数字正则表达式"^[0-9]*(\.[0-9]+)?"
抛出这个错误:
字符“[”处的字符串/字符文字中的词法错误
当我注释掉包含它的行和使用它的函数部分时,我得到这个错误:
无法匹配预期类型“令牌” 针对推断类型 `(String, String)' 预期类型:[令牌] 推断类型:[(String, String)] 在表达式中: lex (drop (length token) s) 在表达式中: 让 token = s =~ 空格 :: String 在 lex (drop (length token) s)
我不知道为什么会出现这些错误。有人能帮我吗?