Jestem nowy parsec (i parserami w ogóle), i mam pewne problemy z tego parsera I napisał:trudności coraz Parsek parser pominąć spacje prawidłowo
list = char '(' *> many (spaces *> some letter) <* spaces <* char ')'
Chodzi o to, aby analizowania list w tym formacie (pracuję się do s-wyrażeń):
(firstElement secondElement thirdElement and so on)
napisałem ten kod, aby go przetestować:
import Control.Applicative
import Text.ParserCombinators.Parsec hiding (many)
list = char '(' *> many (spaces *> some letter) <* spaces <* char ')'
test s = do
putStrLn $ "Testing " ++ show s ++ ":"
parseTest list s
putStrLn ""
main = do
test "()"
test "(hello)"
test "(hello world)"
test "(hello world)"
test "(hello world)"
test "()"
T jego jest wyjście uzyskać:
Testing "()":
[]
Testing "(hello)":
["hello"]
Testing "(hello world)":
["hello","world"]
Testing "(hello world)":
["hello","world"]
Testing "(hello world)":
parse error at (line 1, column 14):
unexpected ")"
expecting space or letter
Testing "()":
parse error at (line 1, column 3):
unexpected ")"
expecting space or letter
Jak widać, to się nie powiedzie, gdy nie jest biała przestrzeń pomiędzy ostatnim elemencie listy i zamknięciu )
. Nie rozumiem, dlaczego biała przestrzeń nie jest zużywana przez spaces
, którą umieszczam tuż przed <* char ')'
. Jaki głupi błąd popełniłem?