Ben Parsec için (ve genel olarak çözümleyicinin) yeni, ben yazdım bu ayrıştırıcı ile bazı sorunlar yaşıyorum ve:Zorluk bir Parsec ayrıştırıcı boşluk atlamak için elde doğru
list = char '(' *> many (spaces *> some letter) <* spaces <* char ')'
fikri etmektir Bu biçimdeki listeleri ayrıştırmak (ı s-ifadesine kadar çalışıyorum):
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:
(firstElement secondElement thirdElement and so on)
bunu test etmek için bu kodu yazdım onun ben çıkış almak edilir: Listenin son elemanı ve kapanış
)
arasında beyaz boşluk olduğunda Gördüğünüz gibi
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
, başarısız olur. Beyaz alanın neden tarafından tüketilmediğini anlamıyorum, <* char ')'
'dan hemen önce koymuştum. Ne aptalca bir hata yaptım?