Я пишу lexer в haskell. Вот код:Проблемы с Haskell lexer
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]+)?"
выдает эту ошибку:
lexical error in string/character literal at character '['
И когда я закомментируйте строку, содержащую его и часть функции, которая использует его, я получаю эту ошибку:
Couldn't match expected type `Token' against inferred type `(String, String)' Expected type: [Token] Inferred type: [(String, String)] In the expression: lex (drop (length token) s) In the expression: let token = s =~ whitespace :: String in lex (drop (length token) s)
У меня есть не знаю, почему я получаю одну из этих ошибок. Кто-нибудь может мне помочь?
Спасибо. : D В парсер! – Micah