スペースがある場合のパース
Spec.hs
2. lexeme :: Parser a -> Parser a
lexeme = L.lexeme sc
目的:トークンを読んだあと、自動で空白をスキップする
使い方:
lexeme L.decimal -- 数字を読み取ったあと、空白を消費
lexeme (some letterChar) -- 識別子を読み取ったあと、空白を消費
イメージ:
入力: "123 "
lexeme L.decimal → 123 を返す、空白も消費ない場合は、後ろの空白が残り、パースが失敗しやすくなります。
3. symbol :: String -> Parser String
symbol = L.symbol sc
目的:記号(キーワードや演算子)を読んだあと空白をスキップ
例:
symbol "." -- ドットを読み取り、空白も消費 symbol "[" -- 左ブラケットを読み取り、空白も消費 内部的には lexeme (string s) と同じような働きです。
4. schar :: Char -> Parser Char
schar c = lexeme (char c)
目的:単一文字のトークンを読み取り、空白をスキップ
文字 . や [ ] の後ろに空白があっても問題なくパースできる
例:
schar '.' -- "." と後ろの空白をまとめて消費 schar '[' -- "[" と後ろの空白をまとめて消費