824eaf6c02773ba97a1f23fa284eaa9bf3636195fielding{- |
824eaf6c02773ba97a1f23fa284eaa9bf3636195fieldingModule : ./Haskell/Wrapper.hs
824eaf6c02773ba97a1f23fa284eaa9bf3636195fieldingDescription : extract Haskell code in structured specs
824eaf6c02773ba97a1f23fa284eaa9bf3636195fieldingCopyright : (c) C. Maeder, Uni Bremen 2003
824eaf6c02773ba97a1f23fa284eaa9bf3636195fieldingLicense : GPLv2 or higher, see LICENSE.txt
824eaf6c02773ba97a1f23fa284eaa9bf3636195fielding
db878466c5e95073429dda0bdd001f45e9486e16fieldingMaintainer : Christian.Maeder@dfki.de
824eaf6c02773ba97a1f23fa284eaa9bf3636195fieldingStability : provisional
824eaf6c02773ba97a1f23fa284eaa9bf3636195fieldingPortability : portable
824eaf6c02773ba97a1f23fa284eaa9bf3636195fielding
824eaf6c02773ba97a1f23fa284eaa9bf3636195fieldingextract Haskell code from String
824eaf6c02773ba97a1f23fa284eaa9bf3636195fielding-}
824eaf6c02773ba97a1f23fa284eaa9bf3636195fielding
824eaf6c02773ba97a1f23fa284eaa9bf3636195fielding{-
6ace32dacb8313226eb9019275d0e4fa45a15148rse stops at unbalanced "}"
6ace32dacb8313226eb9019275d0e4fa45a15148rse
6ace32dacb8313226eb9019275d0e4fa45a15148rse "then" may be recognized if it is not preceded by "if"
6ace32dacb8313226eb9019275d0e4fa45a15148rse but that's not worth the trouble, because ...
6ace32dacb8313226eb9019275d0e4fa45a15148rse
02c7b3fa1c2c34a3a9bd236f6cbf2fc5486b8bb0rse "and" is used by Haskell,
02c7b3fa1c2c34a3a9bd236f6cbf2fc5486b8bb0rse "with", "hide", "reveal", "within", "end"
02c7b3fa1c2c34a3a9bd236f6cbf2fc5486b8bb0rse may be userdefined in Haskell
02c7b3fa1c2c34a3a9bd236f6cbf2fc5486b8bb0rse-}
02c7b3fa1c2c34a3a9bd236f6cbf2fc5486b8bb0rse
02c7b3fa1c2c34a3a9bd236f6cbf2fc5486b8bb0rsemodule Haskell.Wrapper where
02c7b3fa1c2c34a3a9bd236f6cbf2fc5486b8bb0rse
02c7b3fa1c2c34a3a9bd236f6cbf2fc5486b8bb0rseimport Text.ParserCombinators.Parsec
02c7b3fa1c2c34a3a9bd236f6cbf2fc5486b8bb0rseimport Common.Parsec
02c7b3fa1c2c34a3a9bd236f6cbf2fc5486b8bb0rse
02c7b3fa1c2c34a3a9bd236f6cbf2fc5486b8bb0rsehStuff :: CharParser st String
02c7b3fa1c2c34a3a9bd236f6cbf2fc5486b8bb0rsehStuff = flat $ many stuff
89b8bbc89404e7071e573c4f0a17f528996e855djorton
02c7b3fa1c2c34a3a9bd236f6cbf2fc5486b8bb0rsestuff :: CharParser st String
02c7b3fa1c2c34a3a9bd236f6cbf2fc5486b8bb0rsestuff = lineComment <|> nestComment <|> stringLit <|> charLit
39c7699ec0799d394d3f67145d4a12ed82f587b8jorton <|> balanced "{}"
39c7699ec0799d394d3f67145d4a12ed82f587b8jorton <|> balanced "()"
02c7b3fa1c2c34a3a9bd236f6cbf2fc5486b8bb0rse <|> balanced "[]"
6ace32dacb8313226eb9019275d0e4fa45a15148rse <|> letter <:> many (alphaNum <|> char '\'')
8c2ac56b3654234237ca3a943407361c45a3a4d1sf <|> single (noneOf "])}") <?> ""
4281cf6a722c99ae21394dc2000bd48efcebdb3akbrand
4281cf6a722c99ae21394dc2000bd48efcebdb3akbrandbalanced :: String -> CharParser st String
8c2ac56b3654234237ca3a943407361c45a3a4d1sfbalanced [o, c] = char o <:> hStuff <++> string [c]
8c2ac56b3654234237ca3a943407361c45a3a4d1sfbalanced _ = error "balanced"
8c2ac56b3654234237ca3a943407361c45a3a4d1sf
75093d320edb4f9637eccc37b4f37f76456ce4cdkbrandnestComment :: CharParser st String
8c2ac56b3654234237ca3a943407361c45a3a4d1sfnestComment = nestedComment "{-" "-}"
8c2ac56b3654234237ca3a943407361c45a3a4d1sf
8c2ac56b3654234237ca3a943407361c45a3a4d1sflineComment :: CharParser st String
854bdf16f253f5b1e12ed5c4975054c60c7fcc48jortonlineComment =
6ace32dacb8313226eb9019275d0e4fa45a15148rse try ((char '-' <:> many1 (char '-'))
6ace32dacb8313226eb9019275d0e4fa45a15148rse << notFollowedBy (oneOf "!#$%&*+./<=>?@\\^|~"))
70535d6421eb979ac79d8f49d31cd94d75dd8b2fjorton <++> many (noneOf "\n")
70535d6421eb979ac79d8f49d31cd94d75dd8b2fjorton
70535d6421eb979ac79d8f49d31cd94d75dd8b2fjortoncharLit :: CharParser st String
75f5c2db254c0167a0e396254460de09b775d203trawickcharLit = tryString "'''" <|> sQuoted
75f5c2db254c0167a0e396254460de09b775d203trawick