Re: [Haskell] Парсинг тэгов
От: z00n  
Дата: 04.12.07 03:43
Оценка: 2 (1)
Здравствуйте, Odissey_, Вы писали:

Исходя из здравого смысла и того, что я не знаю Haskell — как-то так
Для работы нужен Parsec, хотя возможно Hutton's парсер тоже пойдет (сможет без try?)

type Tag  = String

data Node = Node Tag [Node]
          | Text String
            deriving(Show,Eq)

parseTag =  do { char '<'
               ; tag <- many1 lower
               ; char '>'
               ; return tag
               }
tagLikeThis tag =  do{ char '<' 
                     ; string tag
                     ; char '>'
                     ; return tag
                     }

parseText = do { txt <- many lower
               ; return $ Text txt
               }
               
parseTagNode = try ( do { x <- parseText
                        ; tag   <- parseTag
                        ; node  <- parseTagNode
                        ; tagLikeThis tag
                        ; y <- parseText
                        ; return $ Node ("<"++tag++">") [x,y,node]
                        } )
               <|> parseText
------------------------------------------------------------------
*Main> run parseTagNode "eee<aa>fff<bb>uuu<dd><dd><bb>ee<aa>ss"
Node "<aa>" [Text "eee",Text "ss",Node "<bb>" [Text "fff",Text "ee",Node "<dd>" [Text "uuu",Text "",Text ""]]]
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.