Посмотрев образец кода CSV в Real World Haskell, я попытался создать небольшой синтаксический анализатор XML. Но ошибка закрытия тегов с "неожиданным" / " 'ошибки. Можете ли вы сказать мне, почему мой парсер "closeTag" не работает (или, возможно, никогда не вызывается)? Спасибо!
import Text.ParserCombinators.Parsec
xmlFile = manyTill line eof
line = manyTill tag eol
eol = char '\n'
word = many1 (noneOf "></")
tag = choice [openTag, closeTag, nullTag, word]
nullTag = between (char '<') (string "/>") word
closeTag = between (string "</") (char '>') word
openTag = between (char '<') (char '>') tagContent
attrval = between (char '"') (char '"') word
atts = do {
(char ' ')
; sepBy attr (char ' ')
}
attr = do {
word
; char '='
; attrval
}
tagContent = do {
w <- word
; option [] atts
; return w
}
parseXML :: String -> Either ParseError [[String]]
parseXML input = parse xmlFile "(unknown)" input
main =
do c <- getContents
case parse xmlFile "(stdin)" c of
Left e -> do putStrLn "Error parsing input:"
print e
Right r -> mapM_ print r