Add Phrasebook to testsuite. Move grammars into subfolders. Add run-bench script.

This commit is contained in:
John J. Camilleri
2021-02-20 13:22:29 +01:00
parent 5ad5789b31
commit dca2ebaf72
179 changed files with 20169 additions and 26 deletions

View File

@@ -10,7 +10,7 @@ import qualified Data.List as L
import qualified Data.Map as Map
import System.Environment (getArgs)
import System.Directory (listDirectory)
import System.FilePath ((</>), (<.>), takeBaseName, takeExtension, dropExtension)
import System.FilePath ((</>), (<.>), takeDirectory, takeBaseName, takeExtension, dropExtension)
import Text.Printf (printf)
dir :: FilePath
@@ -21,41 +21,41 @@ main = do
args <- getArgs
case args of
[] -> do
doGrammar "Bind"
doGrammar "Tables"
doGrammar "Params"
doGrammar "Pre"
doGrammar "Projection"
doGrammar "Walking"
doGrammar "Foods"
doGrammar "unittests" "Bind"
doGrammar "unittests" "Tables"
doGrammar "unittests" "Params"
doGrammar "unittests" "Pre"
doGrammar "unittests" "Projection"
doGrammar "walking" "Walking"
doGrammar "foods" "Foods"
[absname] ->
doGrammar absname
doGrammar (takeDirectory absname) (takeBaseName absname)
absname:langs ->
doGrammar' absname langs
doGrammar' (takeDirectory absname) (takeBaseName absname) langs
doGrammar :: String -> IO ()
doGrammar gname = doGrammar' gname []
doGrammar :: FilePath -> String -> IO ()
doGrammar path gname = doGrammar' path gname []
doGrammar' :: String -> [String] -> IO ()
doGrammar' gname cncs = do
doGrammar' :: FilePath -> String -> [String] -> IO ()
doGrammar' path gname cncs = do
-- Collect paths to concrete modules
mods <- map (dir </>)
mods <- map ((dir </> path) </>)
. filter (\p -> gname `L.isPrefixOf` takeBaseName p
&& takeExtension p == ".gf"
&& (null cncs || any (`L.isSuffixOf` dropExtension p) cncs)
)
<$> listDirectory dir
<$> listDirectory (dir </> path)
-- Compile LPGF
lpgf <- compileToLPGF noOptions mods
path <- writeLPGF noOptions lpgf
pgfPath <- writeLPGF noOptions lpgf
putStrLn ""
-- Read back from file
lpgf <- readLPGF path
lpgf <- readLPGF pgfPath
-- Read treebank
gs <- groups . lines <$> readFile (dir </> gname <.> "treebank")
gs <- groups . lines <$> readFile (dir </> path </> gname <.> "treebank")
forM_ gs $ \grp -> do
let ast = drop 2 $ dropWhile (/=':') $ head grp
printf "%s: %s\n" gname ast