私は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
私が抱えている問題は2つあります。1つは、正規表現番号"^[0-9]*(\.[0-9]+)?"
がこのエラーをスローすることです。
文字'['での文字列/文字リテラルの字句エラー
そして、それを含む行とそれを使用する関数の一部をコメントアウトすると、次のエラーが発生します。
期待されるタイプの「トークン」と一致しませんでした 推論された型`(String、String)'に対して 予想されるタイプ:[トークン] 推測されるタイプ:[(String、String)] 式内:lex(drop(長さトークン)s) 式では: トークン=s=〜空白::文字列 lexで(ドロップ(長さトークン)s)
なぜこれらのエラーのいずれかが発生するのかわかりません。誰かが私を助けることができますか?