diff --git a/gf.cabal b/gf.cabal index 1433ed98d..7fdbf392f 100644 --- a/gf.cabal +++ b/gf.cabal @@ -363,32 +363,143 @@ test-suite lpgf src/compiler src/runtime/haskell testsuite/lpgf - build-depends: - array, - base>=4.3 && <5, - bytestring, - containers, - ghc-prim, - mtl, - pretty, - random, - utf8-string + other-modules: Data.Binary Data.Binary.Builder Data.Binary.Get Data.Binary.IEEE754 Data.Binary.Put + GF + GF.Command.Abstract + GF.Command.CommandInfo + GF.Command.Commands + GF.Command.CommonCommands + GF.Command.Help + GF.Command.Importing + GF.Command.Interpreter + GF.Command.Messages + GF.Command.Parse + GF.Command.SourceCommands + GF.Command.TreeOperations + GF.Compile + GF.Compile.CFGtoPGF + GF.Compile.CheckGrammar + GF.Compile.Compute.ConcreteNew + GF.Compile.Compute.Predef + GF.Compile.Compute.Value + GF.Compile.ConcreteToHaskell + GF.Compile.ExampleBased + GF.Compile.Export + GF.Compile.GenerateBC + GF.Compile.GeneratePMCFG + GF.Compile.GetGrammar + GF.Compile.GrammarToCanonical + GF.Compile.GrammarToLPGF + GF.Compile.GrammarToPGF + GF.Compile.Multi + GF.Compile.Optimize + GF.Compile.PGFtoHaskell + GF.Compile.PGFtoJava + GF.Compile.PGFtoJS + GF.Compile.PGFtoJSON + GF.Compile.PGFtoProlog + GF.Compile.PGFtoPython + GF.Compile.ReadFiles + GF.Compile.Rename + GF.Compile.SubExOpt + GF.Compile.Tags + GF.Compile.ToAPI + GF.Compile.TypeCheck.Abstract + GF.Compile.TypeCheck.ConcreteNew + GF.Compile.TypeCheck.Primitives + GF.Compile.TypeCheck.RConcrete + GF.Compile.TypeCheck.TC + GF.Compile.Update + GF.CompileInParallel + GF.CompileOne + GF.Compiler + GF.Data.BacktrackM + GF.Data.ErrM + GF.Data.Graph + GF.Data.Graphviz + GF.Data.Operations + GF.Data.Relation + GF.Data.Str + GF.Data.Utilities + GF.Data.XML + GF.Grammar + GF.Grammar.Analyse + GF.Grammar.Binary + GF.Grammar.BNFC + GF.Grammar.Canonical + GF.Grammar.CanonicalJSON + GF.Grammar.CFG + GF.Grammar.EBNF + GF.Grammar.Grammar + GF.Grammar.Lexer + GF.Grammar.Lockfield + GF.Grammar.Lookup + GF.Grammar.Macros + GF.Grammar.Parser + GF.Grammar.PatternMatch + GF.Grammar.Predef + GF.Grammar.Printer + GF.Grammar.ShowTerm + GF.Grammar.Unify + GF.Grammar.Values + GF.Haskell + GF.Infra.BuildInfo + GF.Infra.CheckM + GF.Infra.Concurrency + GF.Infra.Dependencies + GF.Infra.GetOpt + GF.Infra.Ident + GF.Infra.Location + GF.Infra.Option + GF.Infra.SIO + GF.Infra.UseIO + GF.Interactive + GF.JavaScript.AbsJS + GF.JavaScript.PrintJS + GF.Main + GF.Quiz + GF.Speech.CFGToFA + GF.Speech.FiniteState + GF.Speech.GSL + GF.Speech.JSGF + GF.Speech.PGFToCFG + GF.Speech.PrRegExp + GF.Speech.RegExp + GF.Speech.SISR + GF.Speech.SLF + GF.Speech.SRG + GF.Speech.SRGS_ABNF + GF.Speech.SRGS_XML + GF.Speech.VoiceXML + GF.Support + GF.System.Catch + GF.System.Concurrency + GF.System.Console + GF.System.Directory + GF.System.Process + GF.System.Signal + GF.Text.Clitics + GF.Text.Coding + GF.Text.Lexing + GF.Text.Pretty + GF.Text.Transliterations LPGF + Paths_gf PGF PGF.Binary PGF.ByteCode PGF.CId PGF.Data PGF.Expr - PGF.Expr PGF.Forest PGF.Generate + PGF.Internal PGF.Linearize PGF.Macros PGF.Morphology @@ -396,6 +507,7 @@ test-suite lpgf PGF.Optimize PGF.Paraphrase PGF.Parse + PGF.Printer PGF.Probabilistic PGF.Tree PGF.TrieMap @@ -403,4 +515,29 @@ test-suite lpgf PGF.TypeCheck PGF.Utilities PGF.VisualizeTree + if flag(interrupt) + cpp-options: -DUSE_INTERRUPT + other-modules: GF.System.UseSignal + else + other-modules: GF.System.NoSignal + build-depends: + array, + base>=4.6 && <5, + bytestring, + containers, + directory, + filepath, + ghc-prim, + haskeline, + json, + mtl, + parallel>=3, + pretty, + process, + random, + terminfo, + time, + transformers-compat, + unix, + utf8-string default-language: Haskell2010 diff --git a/src/compiler/GF/Compile.hs b/src/compiler/GF/Compile.hs index f3fbb9b78..43214b206 100644 --- a/src/compiler/GF/Compile.hs +++ b/src/compiler/GF/Compile.hs @@ -1,4 +1,4 @@ -module GF.Compile (compileToPGF, link, linkl, batchCompile, srcAbsName) where +module GF.Compile (compileToPGF, compileToLPGF, link, linkl, batchCompile, srcAbsName) where import GF.Compile.GrammarToPGF(mkCanon2pgf) import GF.Compile.GrammarToLPGF(mkCanon2lpgf) @@ -32,6 +32,9 @@ import LPGF(LPGF) compileToPGF :: Options -> [FilePath] -> IOE PGF compileToPGF opts fs = link opts . snd =<< batchCompile opts fs +compileToLPGF :: Options -> [FilePath] -> IOE LPGF +compileToLPGF opts fs = linkl opts . snd =<< batchCompile opts fs + -- | Link a grammar into a 'PGF' that can be used to 'PGF.linearize' and -- 'PGF.parse' with the "PGF" run-time system. link :: Options -> (ModuleName,Grammar) -> IOE PGF diff --git a/src/compiler/GF/Compiler.hs b/src/compiler/GF/Compiler.hs index df477ca8d..58d743e0b 100644 --- a/src/compiler/GF/Compiler.hs +++ b/src/compiler/GF/Compiler.hs @@ -1,4 +1,4 @@ -module GF.Compiler (mainGFC, linkGrammars, writePGF, writeOutputs) where +module GF.Compiler (mainGFC, linkGrammars, writePGF, writeLPGF, writeOutputs) where import PGF import PGF.Internal(concretes,optimizePGF,unionPGF) diff --git a/testsuite/lpgf/run.hs b/testsuite/lpgf/run.hs index 87ee7a770..c4b0288ab 100644 --- a/testsuite/lpgf/run.hs +++ b/testsuite/lpgf/run.hs @@ -1,5 +1,7 @@ import LPGF import PGF (Tree, mkCId, mkApp, readLanguage, showLanguage, showExpr) +import GF (compileToLPGF, writeLPGF) +import GF.Support (noOptions) import Control.Monad (forM_) import qualified Data.Map as Map @@ -7,7 +9,14 @@ import Text.Printf (printf) main :: IO () main = do + -- Compile LPGF + lpgf <- compileToLPGF noOptions ["testsuite/lpgf/ZeroEng.gf", "testsuite/lpgf/ZeroGer.gf"] + writeLPGF noOptions lpgf + + -- Read back from file lpgf <- readLPGF "Zero.lpgf" + + -- Do some linearization forM_ [tree1, tree2, tree3] $ \tree -> do putStrLn (showExpr [] tree) forM_ (Map.toList (concretes lpgf)) $ \(lang,concr) ->