RunParsers.hs revision bccea164bdfc2ddc3d1e20749bb5477a46eab3a6
c72c1e75a969ff4c336e77481c2a8e42603f13eeChristian MaederModule : $Header$
8ce7b6b96b208cc772742a84faa31ce4bd746066Christian MaederDescription : test some parsers (and printers)
8ce7b6b96b208cc772742a84faa31ce4bd746066Christian MaederCopyright : (c) Christian Maeder and Uni Bremen 2002-2003
c72c1e75a969ff4c336e77481c2a8e42603f13eeChristian MaederLicense : similar to LGPL, see HetCATS/LICENSE.txt or LIZENZ.txt
add3ebffeda5101eae1f7a952bf7a75382a6a5e4Christian MaederMaintainer : Christian.Maeder@dfki.de
add3ebffeda5101eae1f7a952bf7a75382a6a5e4Christian MaederStability : provisional
add3ebffeda5101eae1f7a952bf7a75382a6a5e4Christian MaederPortability : portable
add3ebffeda5101eae1f7a952bf7a75382a6a5e4Christian Maedertest some parsers (and printers)
add3ebffeda5101eae1f7a952bf7a75382a6a5e4Christian Maedermodule Common.RunParsers (exec, StringParser, toStringParser, fromAParser)
add3ebffeda5101eae1f7a952bf7a75382a6a5e4Christian Maederimport Common.Lexer((<<), parseString)
8ce7b6b96b208cc772742a84faa31ce4bd746066Christian Maederimport Common.AnalyseAnnos(addGlobalAnnos)
c72c1e75a969ff4c336e77481c2a8e42603f13eeChristian Maedertype StringParser = GlobalAnnos -> AParser () String
add3ebffeda5101eae1f7a952bf7a75382a6a5e4Christian MaederfromAParser :: Pretty a => AParser () a -> StringParser
add3ebffeda5101eae1f7a952bf7a75382a6a5e4Christian MaederfromAParser p ga = fmap (\ a -> showGlobalDoc ga a "") p
c72c1e75a969ff4c336e77481c2a8e42603f13eeChristian MaedertoStringParser :: Pretty a => (GlobalAnnos -> AParser () a)
add3ebffeda5101eae1f7a952bf7a75382a6a5e4Christian Maeder -> StringParser
add3ebffeda5101eae1f7a952bf7a75382a6a5e4Christian MaedertoStringParser p ga = fmap (\ a -> showGlobalDoc ga a "") $ p ga
add3ebffeda5101eae1f7a952bf7a75382a6a5e4Christian Maederexec :: [(String, StringParser)] -> [(String, StringParser)] -> IO ()
c72c1e75a969ff4c336e77481c2a8e42603f13eeChristian Maederexec lps fps = do l <- getArgs
add3ebffeda5101eae1f7a952bf7a75382a6a5e4Christian Maeder if null l then
add3ebffeda5101eae1f7a952bf7a75382a6a5e4Christian Maeder parseSpec emptyGlobalAnnos $ snd $ head $ fps
add3ebffeda5101eae1f7a952bf7a75382a6a5e4Christian Maeder else do let opt = head l
c72c1e75a969ff4c336e77481c2a8e42603f13eeChristian Maeder lps' = filter (\(s, _) -> s == opt) lps
add3ebffeda5101eae1f7a952bf7a75382a6a5e4Christian Maeder fps' = filter (\(s, _) -> s == opt) fps
add3ebffeda5101eae1f7a952bf7a75382a6a5e4Christian Maeder ga <- if not $ null $ tail l then
add3ebffeda5101eae1f7a952bf7a75382a6a5e4Christian Maeder do let annoFile = head (tail l)
c72c1e75a969ff4c336e77481c2a8e42603f13eeChristian Maeder str <- readFile annoFile
add3ebffeda5101eae1f7a952bf7a75382a6a5e4Christian Maeder maybe (error "run parser")
add3ebffeda5101eae1f7a952bf7a75382a6a5e4Christian Maeder return $ maybeResult
add3ebffeda5101eae1f7a952bf7a75382a6a5e4Christian Maeder $ addGlobalAnnos emptyGlobalAnnos
add3ebffeda5101eae1f7a952bf7a75382a6a5e4Christian Maeder $ parseString annotations str
c72c1e75a969ff4c336e77481c2a8e42603f13eeChristian Maeder -- should not fail
c72c1e75a969ff4c336e77481c2a8e42603f13eeChristian Maeder -- but may return empty annos
c72c1e75a969ff4c336e77481c2a8e42603f13eeChristian Maeder else return emptyGlobalAnnos
add3ebffeda5101eae1f7a952bf7a75382a6a5e4Christian Maeder if null lps' && null fps' then
add3ebffeda5101eae1f7a952bf7a75382a6a5e4Christian Maeder do putStrLn ("unknown option: " ++ opt)
c72c1e75a969ff4c336e77481c2a8e42603f13eeChristian Maeder p <- getProgName
add3ebffeda5101eae1f7a952bf7a75382a6a5e4Christian Maeder putStrLn("Usage: "++p++
add3ebffeda5101eae1f7a952bf7a75382a6a5e4Christian Maeder " [OPTIONS] <Annotations> < infile")
c72c1e75a969ff4c336e77481c2a8e42603f13eeChristian Maeder putStrLn "where OPTIONS is one of:"
8ce7b6b96b208cc772742a84faa31ce4bd746066Christian Maeder putStrLn $ unwords
c72c1e75a969ff4c336e77481c2a8e42603f13eeChristian Maeder (map fst lps ++ map fst fps)
add3ebffeda5101eae1f7a952bf7a75382a6a5e4Christian Maeder else if null lps'
add3ebffeda5101eae1f7a952bf7a75382a6a5e4Christian Maeder then parseSpec ga $ snd $ head fps'
add3ebffeda5101eae1f7a952bf7a75382a6a5e4Christian Maeder else checkLines ga $ snd $ head lps'
add3ebffeda5101eae1f7a952bf7a75382a6a5e4Christian MaedercheckLines :: GlobalAnnos -> StringParser -> IO ()
add3ebffeda5101eae1f7a952bf7a75382a6a5e4Christian MaedercheckLines ga p =
add3ebffeda5101eae1f7a952bf7a75382a6a5e4Christian Maeder do s <- getContents
add3ebffeda5101eae1f7a952bf7a75382a6a5e4Christian Maeder putStr (unlines (scanLines ga p (lines s) 1))
add3ebffeda5101eae1f7a952bf7a75382a6a5e4Christian MaederscanLines :: GlobalAnnos -> StringParser -> [String] -> Line -> [String]
add3ebffeda5101eae1f7a952bf7a75382a6a5e4Christian MaederscanLines _ _ [] _ = []
c72c1e75a969ff4c336e77481c2a8e42603f13eeChristian MaederscanLines ga p (x:l) n = (parseLine ga p x n) : (scanLines ga p l (n+1))
add3ebffeda5101eae1f7a952bf7a75382a6a5e4Christian MaederparseLine :: GlobalAnnos -> StringParser -> String -> Line -> String
add3ebffeda5101eae1f7a952bf7a75382a6a5e4Christian MaederparseLine ga p line n =
add3ebffeda5101eae1f7a952bf7a75382a6a5e4Christian Maeder let pos = setSourceLine (initialPos "") n
add3ebffeda5101eae1f7a952bf7a75382a6a5e4Christian Maeder parser = do setPosition pos
c72c1e75a969ff4c336e77481c2a8e42603f13eeChristian Maeder in showParse $ runParser parser (emptyAnnos ()) "" line
c72c1e75a969ff4c336e77481c2a8e42603f13eeChristian MaederparseSpec :: GlobalAnnos -> StringParser -> IO ()
add3ebffeda5101eae1f7a952bf7a75382a6a5e4Christian MaederparseSpec ga p = do str <- getContents
add3ebffeda5101eae1f7a952bf7a75382a6a5e4Christian Maeder putStrLn $ showParse $
add3ebffeda5101eae1f7a952bf7a75382a6a5e4Christian Maeder runParser (p ga << eof) (emptyAnnos ()) "" str
8ce7b6b96b208cc772742a84faa31ce4bd746066Christian MaedershowParse :: Either ParseError String -> String
c72c1e75a969ff4c336e77481c2a8e42603f13eeChristian MaedershowParse e = case e of
add3ebffeda5101eae1f7a952bf7a75382a6a5e4Christian Maeder Left err -> "parse error at " ++ showErr err ++ "\n"