diff --git a/src/runtime/haskell/LPGF.hs b/src/runtime/haskell/LPGF.hs index 944f3888d..3c47ab385 100644 --- a/src/runtime/haskell/LPGF.hs +++ b/src/runtime/haskell/LPGF.hs @@ -1,5 +1,6 @@ -{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE LambdaCase #-} +{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE ScopedTypeVariables #-} -- | Linearisation-only grammar format. -- Closely follows description in Section 2 of Angelov, Bringert, Ranta (2009): @@ -12,6 +13,7 @@ import PGF.CId import PGF.Expr (Expr) import PGF.Tree (Tree (..), expr2tree, prTree) +import qualified Control.Exception as EX import Control.Monad (liftM, liftM2, forM_) import qualified Control.Monad.Writer as CMW import Data.Binary (Binary, put, get, putWord8, getWord8, encodeFile, decodeFile) @@ -195,6 +197,13 @@ linearizeConcreteText concr expr = lin2string $ lin (expr2tree expr) _ -> Missing f x -> error $ printf "Cannot lin: %s" (prTree x) +-- | Run a compatation and catch any exception/errors. +-- Ideally this library should never throw exceptions, but we're still in development... +try :: a -> IO (Either String a) +try comp = do + let f = Right <$> EX.evaluate comp + EX.catch f (\(e :: EX.SomeException) -> return $ Left (show e)) + -- | Evaluation context data Context = Context { cxArgs :: [LinFun], -- ^ is a sequence of terms diff --git a/testsuite/lpgf/README.md b/testsuite/lpgf/README.md index 383d443ec..f549be9ae 100644 --- a/testsuite/lpgf/README.md +++ b/testsuite/lpgf/README.md @@ -48,11 +48,11 @@ Run each command separately so that memory measurements are isolated. The `+RTS -T -RTS` is so that GHC can report its own memory usage. ``` -stack build --test --bench --no-run-tests --no-run-benchmarks -stack bench --benchmark-arguments "compile pgf testsuite/lpgf/foods/Foods*.gf +RTS -T -RTS" -stack bench --benchmark-arguments "compile lpgf testsuite/lpgf/foods/Foods*.gf +RTS -T -RTS" -stack bench --benchmark-arguments "run pgf Foods.pgf testsuite/lpgf/foods/Foods-all.trees +RTS -T -RTS" -stack bench --benchmark-arguments "run pgf2 Foods.pgf testsuite/lpgf/foods/Foods-all.trees +RTS -T -RTS" +stack build --test --bench --no-run-tests --no-run-benchmarks && +stack bench --benchmark-arguments "compile pgf testsuite/lpgf/foods/Foods*.gf +RTS -T -RTS" && +stack bench --benchmark-arguments "compile lpgf testsuite/lpgf/foods/Foods*.gf +RTS -T -RTS" && +stack bench --benchmark-arguments "run pgf Foods.pgf testsuite/lpgf/foods/Foods-all.trees +RTS -T -RTS" && +stack bench --benchmark-arguments "run pgf2 Foods.pgf testsuite/lpgf/foods/Foods-all.trees +RTS -T -RTS" && stack bench --benchmark-arguments "run lpgf Foods.lpgf testsuite/lpgf/foods/Foods-all.trees +RTS -T -RTS" ``` diff --git a/testsuite/lpgf/bench.hs b/testsuite/lpgf/bench.hs index 9d9f60eaf..9a2c3f53d 100644 --- a/testsuite/lpgf/bench.hs +++ b/testsuite/lpgf/bench.hs @@ -10,6 +10,7 @@ import GF.Support (Options, Flags (..), Verbosity (..), noOptions, addOptions, m import Control.DeepSeq (NFData, force) import Control.Exception (evaluate) import Control.Monad (when, forM) +import Data.Either (isLeft) import qualified Data.List as L import Data.Maybe (fromJust, isJust, isNothing) import qualified Data.Map as Map @@ -105,8 +106,12 @@ main = do when doLPGF $ do heading "LPGF" lpgf <- LPGF.readLPGF (dropExtension (fromJust binaryFile) <.> "lpgf") - timePure "- linearise: " (linLPGF lpgf trees) - return () + -- timePure "- linearise: " (linLPGF lpgf trees) + ress <- time "- linearise: " (linLPGF' lpgf trees) + when (any (any isLeft) ress) $ do + setSGR [SetColor Foreground Dull Red] + putStrLn "Teminated with errors" + setSGR [Reset] stats <- getRTSStats printf "Max memory: %s\n" (convertSize (fromIntegral (max_mem_in_use_bytes stats))) @@ -117,6 +122,7 @@ heading s = do putStrLn s setSGR [Reset] +-- For accurate timing, IO action must for evaluation itself (e.g., write to file) time :: String -> IO a -> IO a time desc io = do start <- getCurrentTime @@ -125,6 +131,7 @@ time desc io = do putStrLn $ desc ++ show (diffUTCTime end start) return r +-- Performs deep evaluation timePure :: (NFData a) => String -> a -> IO a timePure desc val = time desc (return $ force val) @@ -152,6 +159,10 @@ linLPGF :: LPGF.LPGF -> [PGF.Expr] -> [[Text]] linLPGF lpgf trees = [ map (LPGF.linearizeConcreteText concr) trees | (_,concr) <- Map.toList (LPGF.concretes lpgf) ] +linLPGF' :: LPGF.LPGF -> [PGF.Expr] -> IO [[Either String Text]] +linLPGF' lpgf trees = + forM (Map.toList (LPGF.concretes lpgf)) $ \(_,concr) -> mapM (LPGF.try . LPGF.linearizeConcreteText concr) trees + -- | Produce human readable file size -- Adapted from https://hackage.haskell.org/package/hrfsize convertSize :: Integer -> String diff --git a/testsuite/lpgf/phrasebook/Phrasebook.treebank b/testsuite/lpgf/phrasebook/Phrasebook.treebank index a8300973b..443838d44 100644 --- a/testsuite/lpgf/phrasebook/Phrasebook.treebank +++ b/testsuite/lpgf/phrasebook/Phrasebook.treebank @@ -65,7 +65,7 @@ PhrasebookNor: hvordan går det! PhrasebookPol: jak się masz! PhrasebookRon: ce faci! PhrasebookSnd: توهان ڪيئن آهيو! -PhrasebookSpa: ¡ cómo está! +PhrasebookSpa: ¡cómo está! PhrasebookSwe: hur står det till! PhrasebookTha: สบายดีไหม ค่ะ PhrasebookUrd: آپ كیسی ہو @@ -88,7 +88,7 @@ PhrasebookLav: neraksti PhrasebookNor: skriv ikke PhrasebookPol: nie pisz PhrasebookRon: nu scrie -PhrasebookSnd: +PhrasebookSnd: ن [VWrite] [VWrite] PhrasebookSpa: no escribas PhrasebookSwe: skriv inte PhrasebookTha: อย่า เขียน @@ -161,7 +161,7 @@ PhrasebookNor: er denne kyllingen for fersk? PhrasebookPol: czy ten kurczak jest za świeży? PhrasebookRon: acest pui este prea proaspăt? PhrasebookSnd: ڇا ھي ڪڪڙ بيحد تازو آھي? -PhrasebookSpa: ¿ este pollo es demasiado fresco? +PhrasebookSpa: ¿este pollo es demasiado fresco? PhrasebookSwe: är den här kycklingen för färsk? PhrasebookTha: ไก่ กำ ลัง นี้ สด เกินไป ไหม PhrasebookUrd: کیا یہ مرغی بہت تازہ ہے @@ -473,7 +473,7 @@ PhrasebookNor: god morgen! PhrasebookPol: dzień dobry! PhrasebookRon: bună dimineaţa! PhrasebookSnd: صبح بخير! -PhrasebookSpa: ¡ buenos días! +PhrasebookSpa: ¡buenos días! PhrasebookSwe: god morgon! PhrasebookTha: สวัสดี ครับ PhrasebookUrd: صبح بخیر @@ -497,7 +497,7 @@ PhrasebookNor: beklager! PhrasebookPol: przepraszam! PhrasebookRon: îmi pare rău! PhrasebookSnd: معاف ڪجو! -PhrasebookSpa: ¡ disculpe! +PhrasebookSpa: ¡disculpe! PhrasebookSwe: förlåt! PhrasebookTha: ขอโทษ ค่ะ PhrasebookUrd: معاف كیجیے گا @@ -521,7 +521,7 @@ PhrasebookNor: unnskyld! PhrasebookPol: przepraszam! PhrasebookRon: pardon! PhrasebookSnd: معاف ڪجو! -PhrasebookSpa: ¡ perdón! +PhrasebookSpa: ¡perdón! PhrasebookSwe: ursäkta! PhrasebookTha: ขอโทษ ค่ะ PhrasebookUrd: معاف كیجیے گا @@ -617,7 +617,7 @@ PhrasebookNor: hvor langt er det til den populæreste dyreparken fra det dyreste PhrasebookPol: jak daleko jest pieszo z najdroższej apteki do najpopularniejszego zoo? PhrasebookRon: cât este pâna la cea mai populară grădină zoologică de la cea mai scumpă farmacie pe jos? PhrasebookSnd: مشهور راڻي باغ مهانگو ميڊيڪل اسٽور وٽان پيادو ڪتنی پري آھي? -PhrasebookSpa: ¿ a qué distancia el zoo más popular está de la farmacia más cara a pie? +PhrasebookSpa: ¿a qué distancia el zoo más popular está de la farmacia más cara a pie? PhrasebookSwe: hur långt är det till den populäraste djurparken från det dyraste apoteket till fots? PhrasebookTha: สวนสัตว์ แห่ง โด่งดัง ที่ สุด ไกลเท่าไร จาก ร้านขายยา แห่ง แพง ที่ สุด ด้วยการเดิน PhrasebookUrd: پیدل سب سے مہنگی فارمیسی سے سب سے مشہور چڑیا گھر کتنی دور ہے @@ -665,7 +665,7 @@ PhrasebookNor: nei! PhrasebookPol: nie! PhrasebookRon: nu! PhrasebookSnd: نا! -PhrasebookSpa: ¡ no! +PhrasebookSpa: ¡no! PhrasebookSwe: nej! PhrasebookTha: ไม่ ครับ PhrasebookUrd: نہیں @@ -761,7 +761,7 @@ PhrasebookNor: se deg snart! PhrasebookPol: do zobaczenia! PhrasebookRon: pe curând! PhrasebookSnd: موڪلاڻي ڪانهي! -PhrasebookSpa: ¡ nos vemos pronto! +PhrasebookSpa: ¡nos vemos pronto! PhrasebookSwe: vi ses snart! PhrasebookTha: เจอกันนะ ครับ PhrasebookUrd: ملتے ہیں @@ -809,7 +809,7 @@ PhrasebookNor: nei! PhrasebookPol: nie! PhrasebookRon: nu! PhrasebookSnd: نا! -PhrasebookSpa: ¡ no! +PhrasebookSpa: ¡no! PhrasebookSwe: nej! PhrasebookTha: ไม่ ค่ะ PhrasebookUrd: نہیں @@ -832,7 +832,7 @@ PhrasebookLav: nelasi PhrasebookNor: les ikke PhrasebookPol: nie czytaj PhrasebookRon: nu citi -PhrasebookSnd: +PhrasebookSnd: ن [VRead] [VRead] PhrasebookSpa: no leas PhrasebookSwe: läs inte PhrasebookTha: อย่า อ่าน @@ -904,7 +904,7 @@ PhrasebookLav: lasiet PhrasebookNor: les PhrasebookPol: przeczytajcie PhrasebookRon: citiţi -PhrasebookSnd: +PhrasebookSnd: [VRead] [VRead] PhrasebookSpa: leed PhrasebookSwe: läs PhrasebookTha: อ่าน ซิ @@ -1001,7 +1001,7 @@ PhrasebookNor: gratulerer med dagen! PhrasebookPol: wszystkiego najlepszego z okazji urodzin! PhrasebookRon: la mulți ani! PhrasebookSnd: جنم ڏينهن مبارڪ! -PhrasebookSpa: ¡ feliz cumpleaños! +PhrasebookSpa: ¡feliz cumpleaños! PhrasebookSwe: grattis på födelsedagen! PhrasebookTha: สุขสันต์วันเกิด ครับ PhrasebookUrd: سالگرہ مبارك @@ -1025,7 +1025,7 @@ PhrasebookNor: vær så snill! PhrasebookPol: poproszę! PhrasebookRon: te rog! PhrasebookSnd: مهرباني ڪريو! -PhrasebookSpa: ¡ por favor! +PhrasebookSpa: ¡por favor! PhrasebookSwe: var så god! PhrasebookTha: นะ ครับ PhrasebookUrd: مہربانی كر كے @@ -1072,7 +1072,7 @@ PhrasebookLav: lasi PhrasebookNor: les PhrasebookPol: przeczytaj PhrasebookRon: citeşte -PhrasebookSnd: +PhrasebookSnd: [VRead] [VRead] PhrasebookSpa: lee PhrasebookSwe: läs PhrasebookTha: อ่าน ซิ @@ -1121,7 +1121,7 @@ PhrasebookNor: ja! PhrasebookPol: tak! PhrasebookRon: da! PhrasebookSnd: ھا! -PhrasebookSpa: ¡ sí! +PhrasebookSpa: ¡sí! PhrasebookSwe: ja! PhrasebookTha: ใช่ ค่ะ PhrasebookUrd: ہاں @@ -1169,7 +1169,7 @@ PhrasebookNor: hei! PhrasebookPol: cześć! PhrasebookRon: salut! PhrasebookSnd: السلام عليڪم! -PhrasebookSpa: ¡ hola! +PhrasebookSpa: ¡hola! PhrasebookSwe: hej! PhrasebookTha: สวัสดี ครับ PhrasebookUrd: اسلام علیكم @@ -1216,7 +1216,7 @@ PhrasebookLav: neraksti PhrasebookNor: skriv ikke PhrasebookPol: nie pisz PhrasebookRon: nu scrie -PhrasebookSnd: +PhrasebookSnd: ن [VWrite] [VWrite] PhrasebookSpa: no escribas PhrasebookSwe: skriv inte PhrasebookTha: อย่า เขียน @@ -1289,7 +1289,7 @@ PhrasebookNor: takk! PhrasebookPol: dziękuję! PhrasebookRon: mulţumesc! PhrasebookSnd: ٿورا! -PhrasebookSpa: ¡ gracias! +PhrasebookSpa: ¡gracias! PhrasebookSwe: tack! PhrasebookTha: ขอบคุณ ค่ะ PhrasebookUrd: شكریہ @@ -1313,7 +1313,7 @@ PhrasebookNor: vi ses i en bank idag! PhrasebookPol: do zobaczenia dziś w banku! PhrasebookRon: ne vedem la o bancă astăzi! PhrasebookSnd: بئنڪ ۾ اڄ ملون ٿا! -PhrasebookSpa: ¡ nos vemos hoy en un banco! +PhrasebookSpa: ¡nos vemos hoy en un banco! PhrasebookSwe: vi ses i en bank idag! PhrasebookTha: เจอกันที่ ที่ ธนาคาร วันนี้ ครับ PhrasebookUrd: بینك میں آج ملتے ہیں @@ -1360,7 +1360,7 @@ PhrasebookLav: raksti PhrasebookNor: skriv PhrasebookPol: napisz PhrasebookRon: scrie -PhrasebookSnd: +PhrasebookSnd: [VWrite] [VWrite] PhrasebookSpa: escribe PhrasebookSwe: skriv PhrasebookTha: เขียน ซิ @@ -1409,7 +1409,7 @@ PhrasebookNor: hvor spiser mannen Deres? PhrasebookPol: gdzie pana mąż je? PhrasebookRon: unde mănâncă soţul dumneavoastră? PhrasebookSnd: ڪٿي توھان جي مڙس کائی ٿو? -PhrasebookSpa: ¿ dónde su marido come? +PhrasebookSpa: ¿dónde su marido come? PhrasebookSwe: var äter er man? PhrasebookTha: สามี ของ คุณ กิน ที่ไหน PhrasebookUrd: کہاں آپ کا شوہر کھاتا ہے @@ -1480,7 +1480,7 @@ PhrasebookLav: lūdzu nerakstiet PhrasebookNor: skriv ikke PhrasebookPol: nie pisz PhrasebookRon: nu scrie -PhrasebookSnd: +PhrasebookSnd: ن [VWrite] [VWrite] PhrasebookSpa: no escriba PhrasebookSwe: skriv inte PhrasebookTha: อย่า เขียน @@ -1505,7 +1505,7 @@ PhrasebookNor: ja! PhrasebookPol: tak! PhrasebookRon: da! PhrasebookSnd: ھا! -PhrasebookSpa: ¡ sí! +PhrasebookSpa: ¡sí! PhrasebookSwe: jo! PhrasebookTha: ใช่ ค่ะ PhrasebookUrd: ہاں @@ -1529,7 +1529,7 @@ PhrasebookNor: hvor langt er det til den dårligste kirka til fots? PhrasebookPol: jak daleko jest pieszo do najgorszego kościoła? PhrasebookRon: cât este pâna la cea mai rea biserică pe jos? PhrasebookSnd: خراب چرچ پيادو ڪتنی پري آھي? -PhrasebookSpa: ¿ a qué distancia la peor iglesia está a pie? +PhrasebookSpa: ¿a qué distancia la peor iglesia está a pie? PhrasebookSwe: hur långt är det till den sämsta kyrkan till fots? PhrasebookTha: โบสถ์ แห่ง เลว ที่ สุด ไกลเท่าไร ด้วยการเดิน PhrasebookUrd: پیدل سب سے برا چرچ کتنی دور ہے @@ -1577,7 +1577,7 @@ PhrasebookNor: beklager! PhrasebookPol: przepraszam! PhrasebookRon: îmi pare rău! PhrasebookSnd: معاف ڪجو! -PhrasebookSpa: ¡ disculpe! +PhrasebookSpa: ¡disculpe! PhrasebookSwe: förlåt! PhrasebookTha: ขอโทษ ค่ะ PhrasebookUrd: معاف كیجیے گا @@ -1649,7 +1649,7 @@ PhrasebookNor: hvor langt er det til et sentrum til fots? PhrasebookPol: jak daleko jest pieszo do centrum? PhrasebookRon: cât este pâna la un centru pe jos? PhrasebookSnd: سينٽر پيادو ڪتنی پري آھي? -PhrasebookSpa: ¿ a qué distancia un centro está a pie? +PhrasebookSpa: ¿a qué distancia un centro está a pie? PhrasebookSwe: hur långt är det till en innerstad till fots? PhrasebookTha: ศูนย์กลาง ไกลเท่าไร ด้วยการเดิน PhrasebookUrd: پیدل سنٹر کتنی دور ہے @@ -1721,7 +1721,7 @@ PhrasebookNor: vær så snill! PhrasebookPol: poproszę! PhrasebookRon: te rog! PhrasebookSnd: مهرباني ڪريو! -PhrasebookSpa: ¡ por favor! +PhrasebookSpa: ¡por favor! PhrasebookSwe: var så god! PhrasebookTha: นะ ครับ PhrasebookUrd: مہربانی كر كے @@ -1744,7 +1744,7 @@ PhrasebookLav: rakstiet PhrasebookNor: skriv PhrasebookPol: napiszcie PhrasebookRon: scrieţi -PhrasebookSnd: +PhrasebookSnd: [VWrite] [VWrite] PhrasebookSpa: escribid PhrasebookSwe: skriv PhrasebookTha: เขียน ซิ @@ -1817,7 +1817,7 @@ PhrasebookNor: hvor langt er det til en dyrepark? PhrasebookPol: jak daleko jest zoo? PhrasebookRon: cât este pâna la o grădină zoologică? PhrasebookSnd: راڻي باغ ڪتنی پري آھي? -PhrasebookSpa: ¿ a qué distancia un zoo está? +PhrasebookSpa: ¿a qué distancia un zoo está? PhrasebookSwe: hur långt är det till en djurpark? PhrasebookTha: สวนสัตว์ ไกลเท่าไร PhrasebookUrd: چڑیا گھر کتنی دور ہے @@ -1865,7 +1865,7 @@ PhrasebookNor: unnskyld! PhrasebookPol: przepraszam! PhrasebookRon: pardon! PhrasebookSnd: معاف ڪجو! -PhrasebookSpa: ¡ perdón! +PhrasebookSpa: ¡perdón! PhrasebookSwe: ursäkta! PhrasebookTha: ขอโทษ ค่ะ PhrasebookUrd: معاف كیجیے گا @@ -1937,7 +1937,7 @@ PhrasebookNor: ha det bra! PhrasebookPol: do widzenia! PhrasebookRon: la revedere! PhrasebookSnd: خدا حافظ! -PhrasebookSpa: ¡ hasta luego! +PhrasebookSpa: ¡hasta luego! PhrasebookSwe: hej då! PhrasebookTha: ลาก่อน ค่ะ PhrasebookUrd: خدا حافظ @@ -2009,7 +2009,7 @@ PhrasebookNor: unnskyld! PhrasebookPol: przepraszam! PhrasebookRon: mă scuzați! PhrasebookSnd: معاف ڪجو! -PhrasebookSpa: ¡ perdone! +PhrasebookSpa: ¡perdone! PhrasebookSwe: ursäkta! PhrasebookTha: ขอโทษ ครับ PhrasebookUrd: معاف كیجیے گا @@ -2033,7 +2033,7 @@ PhrasebookNor: hvor er kona deres? PhrasebookPol: gdzie jest ich żona? PhrasebookRon: unde este soţia lor? PhrasebookSnd: انهن جو زال ڪٿي آھي? -PhrasebookSpa: ¿ dónde su esposa está? +PhrasebookSpa: ¿dónde su esposa está? PhrasebookSwe: var är deras fru? PhrasebookTha: ภรรยา ของ พวกเขา อยู่ ที่ไหน PhrasebookUrd: ان کی بیوی کہاں ہے @@ -2177,7 +2177,7 @@ PhrasebookNor: god natt! PhrasebookPol: dobranoc! PhrasebookRon: noapte bună! PhrasebookSnd: رات بخير! -PhrasebookSpa: ¡ buenas noches! +PhrasebookSpa: ¡buenas noches! PhrasebookSwe: god natt! PhrasebookTha: ราตรีสวัสดิ์ ครับ PhrasebookUrd: رات بخیر @@ -2201,7 +2201,7 @@ PhrasebookNor: [GWhatTime]! PhrasebookPol: [GWhatTime]! PhrasebookRon: [GWhatTime]! PhrasebookSnd: [GWhatTime]! -PhrasebookSpa: ¡ qué hora es! +PhrasebookSpa: ¡qué hora es! PhrasebookSwe: vad är klockan! PhrasebookTha: [GWhatTime] ค่ะ PhrasebookUrd: [GWhatTime] @@ -2225,7 +2225,7 @@ PhrasebookNor: hvor venter dere på kona deres? PhrasebookPol: gdzie wy czekacie na waszą żonę? PhrasebookRon: unde o aşteptaţi voi pe soţia voastră? PhrasebookSnd: ڪٿي توھان توھانجي زال انتظار انتظاو ٿا? -PhrasebookSpa: ¿ dónde esperáis a su esposa? +PhrasebookSpa: ¿dónde esperáis a su esposa? PhrasebookSwe: var väntar ni på er fru? PhrasebookTha: พวกคุณ รอ ภรรยา ของ พวกคุณ ที่ไหน PhrasebookUrd: کہاں تم تمھاری بیوی انتظار کرتے ہو @@ -2249,7 +2249,7 @@ PhrasebookNor: hyggelig å treffe deg! PhrasebookPol: miło mi! PhrasebookRon: încântat! PhrasebookSnd: توهان سان ملي ڪري سٺو لڳو! -PhrasebookSpa: ¡ encantado de conocerle! +PhrasebookSpa: ¡encantado de conocerle! PhrasebookSwe: trevligt att träffas! PhrasebookTha: ยินดีที่ได้รู้จัก ครับ PhrasebookUrd: آپ سے مل كر اچھا لگا @@ -2273,7 +2273,7 @@ PhrasebookNor: ja! PhrasebookPol: tak! PhrasebookRon: da! PhrasebookSnd: ھا! -PhrasebookSpa: ¡ sí! +PhrasebookSpa: ¡sí! PhrasebookSwe: jo! PhrasebookTha: ใช่ ค่ะ PhrasebookUrd: ہاں @@ -2344,7 +2344,7 @@ PhrasebookLav: lasi PhrasebookNor: les PhrasebookPol: przeczytaj PhrasebookRon: citeşte -PhrasebookSnd: +PhrasebookSnd: [VRead] [VRead] PhrasebookSpa: lee PhrasebookSwe: läs PhrasebookTha: อ่าน ซิ diff --git a/testsuite/lpgf/run-bench.sh b/testsuite/lpgf/run-bench.sh index d2678d164..86ac80304 100755 --- a/testsuite/lpgf/run-bench.sh +++ b/testsuite/lpgf/run-bench.sh @@ -12,9 +12,9 @@ FLAGS="+RTS -T -RTS" stack build --test --bench --no-run-tests --no-run-benchmarks printf "\n-- COMPILE --\n\n" -DEBUG=1 stack bench --benchmark-arguments "compile pgf ${PREFIX}${1}.gf ${FLAGS}" +stack bench --benchmark-arguments "compile pgf ${PREFIX}${1}.gf ${FLAGS}" printf "\n" -DEBUG=1 stack bench --benchmark-arguments "compile lpgf ${PREFIX}${1}.gf ${FLAGS}" +stack bench --benchmark-arguments "compile lpgf ${PREFIX}${1}.gf ${FLAGS}" printf "\n-- RUN -- \n\n" stack bench --benchmark-arguments "run pgf Phrasebook.pgf ${TREES} ${FLAGS}" diff --git a/testsuite/lpgf/test.hs b/testsuite/lpgf/test.hs index 404cfe1f8..fe6a61f89 100644 --- a/testsuite/lpgf/test.hs +++ b/testsuite/lpgf/test.hs @@ -68,13 +68,14 @@ doGrammar' path gname cncs = do results <- forM gs $ \grp -> do let ast = drop 2 $ dropWhile (/=':') $ head grp printf "- %s: %s\n" gname ast - let - Just tree = readExpr ast - -- Linearization into all languages - outs = - [ printf "%s: %s" (showLanguage lang) (linearizeConcrete concr tree) - | (lang,concr) <- Map.toList (concretes lpgf) - ] + let Just tree = readExpr ast + + -- Linearization into all languages + outs <- forM (Map.toList (concretes lpgf)) $ \(lang,concr) -> do + e <- try $ linearizeConcrete concr tree + return $ case e of + Right s -> printf "%s: %s" (showLanguage lang) s + Left e -> printf "%s: ERROR: %s" (showLanguage lang) e -- filter out missing langs from treebank let golds = [ g | o <- outs, g <- tail grp, takeWhile (/=':') o == takeWhile (/=':') g ]