1
0
forked from GitHub/gf-core

PGF library: expose only PGF and PGF.Internal instead of all modules

PGF exports the public, stable API.
PGF.Internal exports additional things needed in the GF compiler & shell,
including the nonstardard version of Data.Binary.
This commit is contained in:
hallgren
2014-06-12 14:43:18 +00:00
parent 352ecb7eb8
commit d6252d1c16
34 changed files with 80 additions and 71 deletions

View File

@@ -76,7 +76,7 @@ Library
if flag(custom-binary) if flag(custom-binary)
hs-source-dirs: src/binary hs-source-dirs: src/binary
exposed-modules: other-modules:
-- not really part of GF but I have changed the original binary library -- not really part of GF but I have changed the original binary library
-- and we have to keep the copy for now. -- and we have to keep the copy for now.
Data.Binary Data.Binary
@@ -95,14 +95,15 @@ Library
exposed-modules: exposed-modules:
PGF PGF
PGF.Internal
PGF.Lexing
PGF.Utilities
other-modules:
PGF.Data PGF.Data
PGF.Macros PGF.Macros
PGF.Binary PGF.Binary
PGF.Optimize PGF.Optimize
PGF.Printer PGF.Printer
PGF.Utilities
PGF.Lexing
other-modules:
PGF.CId PGF.CId
PGF.Expr PGF.Expr
PGF.Generate PGF.Generate

View File

@@ -14,14 +14,14 @@ import Prelude hiding (putStrLn)
import PGF import PGF
import PGF.Macros(lookStartCat,functionsToCat,lookValCat,restrictPGF,hasLin) import PGF.Internal(lookStartCat,functionsToCat,lookValCat,restrictPGF,hasLin)
import PGF.Data(abstract,funs,cats,Literal(LStr),Expr(EFun,ELit)) ---- import PGF.Internal(abstract,funs,cats,Literal(LStr),Expr(EFun,ELit)) ----
--import PGF.Morphology(isInMorpho,morphoKnown) --import PGF.Morphology(isInMorpho,morphoKnown)
import PGF.Printer(ppFun,ppCat) import PGF.Internal(ppFun,ppCat)
--import PGF.Probabilistic(rankTreesByProbs,probTree,setProbabilities) --import PGF.Probabilistic(rankTreesByProbs,probTree,setProbabilities)
--import PGF.Generate (generateRandomFrom) ---- --import PGF.Generate (generateRandomFrom) ----
--import PGF.Tree (Tree(Fun), expr2tree, tree2expr) --import PGF.Tree (Tree(Fun), expr2tree, tree2expr)
import PGF.Optimize(optimizePGF) import PGF.Internal(optimizePGF)
import GF.Compile.Export import GF.Compile.Export
import GF.Compile.ToAPI import GF.Compile.ToAPI
@@ -41,7 +41,7 @@ import GF.Command.TreeOperations ---- temporary place for typecheck and compute
import GF.Data.Operations import GF.Data.Operations
import Data.Binary (encodeFile) import PGF.Internal (encodeFile)
import Data.List(intersperse,nub) import Data.List(intersperse,nub)
import Data.Maybe import Data.Maybe
import qualified Data.Map as Map import qualified Data.Map as Map

View File

@@ -1,8 +1,7 @@
module GF.Command.Importing (importGrammar, importSource) where module GF.Command.Importing (importGrammar, importSource) where
import PGF import PGF
import PGF.Data import PGF.Internal(optimizePGF,unionPGF,msgUnionPGF)
import PGF.Optimize
import GF.Compile import GF.Compile
import GF.Compile.Multi (readMulti) import GF.Compile.Multi (readMulti)

View File

@@ -12,7 +12,7 @@ import GF.Command.Commands
import GF.Command.Abstract import GF.Command.Abstract
import GF.Command.Parse import GF.Command.Parse
import PGF import PGF
import PGF.Data import PGF.Internal
--import PGF.Morphology --import PGF.Morphology
import GF.Infra.SIO import GF.Infra.SIO

View File

@@ -5,7 +5,7 @@ module GF.Command.TreeOperations (
) where ) where
import PGF import PGF
import PGF.Data import PGF.Internal(Expr(..),unAppForm)
import Data.List import Data.List
type TreeOp = [Expr] -> [Expr] type TreeOp = [Expr] -> [Expr]

View File

@@ -34,7 +34,7 @@ import Data.List(nub)
import Data.Time(UTCTime) import Data.Time(UTCTime)
import Text.PrettyPrint import Text.PrettyPrint
import PGF.Optimize import PGF.Internal(optimizePGF)
import PGF import PGF
-- | Compiles a number of source files and builds a 'PGF' structure for them. -- | Compiles a number of source files and builds a 'PGF' structure for them.

View File

@@ -4,9 +4,7 @@ import GF.Grammar.CFG
import GF.Infra.UseIO import GF.Infra.UseIO
import PGF import PGF
import PGF.Data import PGF.Internal
import PGF.Macros
import PGF.Optimize
import qualified Data.Set as Set import qualified Data.Set as Set
import qualified Data.Map as Map import qualified Data.Map as Map

View File

@@ -1,6 +1,6 @@
module GF.Compile.Compute.Value where module GF.Compile.Compute.Value where
import GF.Grammar.Grammar(Label,Type,MetaId,Patt,QIdent) import GF.Grammar.Grammar(Label,Type,MetaId,Patt,QIdent)
import PGF.Data(BindType) import PGF.Internal(BindType)
import GF.Infra.Ident(Ident) import GF.Infra.Ident(Ident)
import Text.Show.Functions() import Text.Show.Functions()
import Data.Ix(Ix) import Data.Ix(Ix)

View File

@@ -1,7 +1,7 @@
module GF.Compile.Export where module GF.Compile.Export where
import PGF import PGF
import PGF.Printer(ppPGF) import PGF.Internal(ppPGF)
import GF.Compile.PGFtoHaskell import GF.Compile.PGFtoHaskell
import GF.Compile.PGFtoProlog import GF.Compile.PGFtoProlog
import GF.Compile.PGFtoLProlog import GF.Compile.PGFtoLProlog

View File

@@ -2,13 +2,13 @@ module GF.Compile.GenerateBC(generateByteCode) where
import GF.Grammar import GF.Grammar
import GF.Compile.Instructions import GF.Compile.Instructions
import PGF.Data import PGF.Internal(Binary(..),encode,BCAddr)
import Data.Maybe import Data.Maybe
import qualified Data.IntMap as IntMap import qualified Data.IntMap as IntMap
import qualified Data.ByteString as BSS import qualified Data.ByteString as BSS
import qualified Data.ByteString.Lazy as BS import qualified Data.ByteString.Lazy as BS
import Data.Binary import PGF.Internal()
generateByteCode :: [(QIdent,Info)] -> ([(QIdent,Info,BCAddr)], BSS.ByteString) generateByteCode :: [(QIdent,Info)] -> ([(QIdent,Info,BCAddr)], BSS.ByteString)
generateByteCode = runGenM . mapM genFun generateByteCode = runGenM . mapM genFun

View File

@@ -14,7 +14,7 @@ module GF.Compile.GeneratePMCFG
) where ) where
--import PGF.CId --import PGF.CId
import PGF.Data(CncCat(..),Symbol(..),fidVar) import PGF.Internal as PGF(CncCat(..),Symbol(..),fidVar)
import GF.Infra.Option import GF.Infra.Option
import GF.Grammar hiding (Env, mkRecord, mkTable) import GF.Grammar hiding (Env, mkRecord, mkTable)
@@ -194,13 +194,12 @@ unfactor t = CM (\gr c -> c (unfac gr t))
Vr y | y == x -> u Vr y | y == x -> u
_ -> composSafeOp (restore x u) t _ -> composSafeOp (restore x u) t
pgfCncCat :: SourceGrammar -> Type -> Int -> PGF.Data.CncCat pgfCncCat :: SourceGrammar -> Type -> Int -> CncCat
pgfCncCat gr lincat index = pgfCncCat gr lincat index =
let ((_,size),schema) = computeCatRange gr lincat let ((_,size),schema) = computeCatRange gr lincat
in PGF.Data.CncCat index in PGF.CncCat index (index+size-1)
(index+size-1) (mkArray (map (renderStyle style{mode=OneLineMode} . ppPath)
(mkArray (map (renderStyle style{mode=OneLineMode} . ppPath) (getStrPaths schema)))
(getStrPaths schema)))
where where
getStrPaths :: Schema Identity s c -> [Path] getStrPaths :: Schema Identity s c -> [Path]
getStrPaths = collect CNil [] getStrPaths = collect CNil []

View File

@@ -6,11 +6,11 @@ import GF.Compile.GeneratePMCFG
import GF.Compile.GenerateBC import GF.Compile.GenerateBC
import PGF(CId,mkCId,utf8CId) import PGF(CId,mkCId,utf8CId)
import PGF.Data(fidInt,fidFloat,fidString,fidVar) import PGF.Internal(fidInt,fidFloat,fidString,fidVar)
import PGF.Optimize(updateProductionIndices) import PGF.Internal(updateProductionIndices)
--import qualified PGF.Macros as CM --import qualified PGF.Macros as CM
import qualified PGF.Data as C import qualified PGF.Internal as C
import qualified PGF.Data as D import qualified PGF.Internal as D
import GF.Grammar.Predef import GF.Grammar.Predef
--import GF.Grammar.Printer --import GF.Grammar.Printer
import GF.Grammar.Grammar import GF.Grammar.Grammar

View File

@@ -1,10 +1,7 @@
module GF.Compile.Instructions where module GF.Compile.Instructions where
--import Data.IORef --import Data.IORef
import Data.Binary import PGF.Internal -- Binary
import Data.Binary.Put
import Data.Binary.Get
import Data.Binary.IEEE754
import PGF(CId) import PGF(CId)
--import PGF.CId --import PGF.CId
--import PGF.Binary --import PGF.Binary

View File

@@ -17,8 +17,7 @@
module GF.Compile.PGFtoHaskell (grammar2haskell) where module GF.Compile.PGFtoHaskell (grammar2haskell) where
import PGF(showCId) import PGF(showCId)
import PGF.Data import PGF.Internal
import PGF.Macros
import GF.Data.Operations import GF.Data.Operations
import GF.Infra.Option import GF.Infra.Option

View File

@@ -1,8 +1,7 @@
module GF.Compile.PGFtoJS (pgf2js) where module GF.Compile.PGFtoJS (pgf2js) where
import PGF(showCId) import PGF(CId,showCId)
import PGF.Data hiding (mkStr) import PGF.Internal as M
import qualified PGF.Macros as M
import qualified GF.JavaScript.AbsJS as JS import qualified GF.JavaScript.AbsJS as JS
import qualified GF.JavaScript.PrintJS as JS import qualified GF.JavaScript.PrintJS as JS

View File

@@ -1,7 +1,7 @@
module GF.Compile.PGFtoLProlog(grammar2lambdaprolog_mod, grammar2lambdaprolog_sig) where module GF.Compile.PGFtoLProlog(grammar2lambdaprolog_mod, grammar2lambdaprolog_sig) where
import PGF(mkCId,ppCId,showCId,wildCId) import PGF(mkCId,ppCId,showCId,wildCId)
import PGF.Data hiding (ppExpr, ppType, ppHypo) import PGF.Internal hiding (ppExpr,ppType,ppHypo,ppCat,ppFun)
--import PGF.Macros --import PGF.Macros
import Data.List import Data.List
import Data.Maybe import Data.Maybe

View File

@@ -9,7 +9,7 @@
module GF.Compile.PGFtoProlog (grammar2prolog) where module GF.Compile.PGFtoProlog (grammar2prolog) where
import PGF(mkCId,wildCId,showCId) import PGF(mkCId,wildCId,showCId)
import PGF.Data import PGF.Internal
--import PGF.Macros --import PGF.Macros
import GF.Data.Operations import GF.Data.Operations

View File

@@ -9,8 +9,7 @@
module GF.Compile.PGFtoPython (pgf2python) where module GF.Compile.PGFtoPython (pgf2python) where
import PGF(showCId) import PGF(showCId)
import PGF.Data import PGF.Internal as M
import qualified PGF.Macros as M
import GF.Data.Operations import GF.Data.Operations

View File

@@ -2,7 +2,7 @@ module GF.Compile.ToAPI
(stringToAPI,exprToAPI) (stringToAPI,exprToAPI)
where where
import PGF.Data import PGF.Internal
import PGF(showCId) import PGF(showCId)
import Data.Maybe import Data.Maybe
--import System.IO --import System.IO

View File

@@ -13,7 +13,7 @@ import Prelude hiding (catch)
import Control.Exception(catch,ErrorCall(..),throwIO) import Control.Exception(catch,ErrorCall(..),throwIO)
--import Data.Char --import Data.Char
import Data.Binary import PGF.Internal(Binary(..),Word8,putWord8,getWord8,encodeFile,decodeFile)
--import Control.Monad --import Control.Monad
import qualified Data.Map as Map import qualified Data.Map as Map
import qualified Data.ByteString.Char8 as BS import qualified Data.ByteString.Char8 as BS
@@ -24,7 +24,7 @@ import GF.Infra.Option
import GF.Grammar.Grammar import GF.Grammar.Grammar
import PGF() -- Binary instances import PGF() -- Binary instances
import PGF.Data(Literal(..)) import PGF.Internal(Literal(..))
-- Please change this every time when the GFO format is changed -- Please change this every time when the GFO format is changed
gfoVersion = "GF03" gfoVersion = "GF03"

View File

@@ -66,7 +66,7 @@ import GF.Infra.Option ---
import GF.Data.Operations import GF.Data.Operations
import PGF.Data (FId, FunId, SeqId, LIndex, Sequence, BindType(..)) import PGF.Internal (FId, FunId, SeqId, LIndex, Sequence, BindType(..))
--import Data.List --import Data.List
import Data.Array.IArray import Data.Array.IArray

View File

@@ -29,8 +29,7 @@ import GF.Infra.Option
import GF.Grammar.Values import GF.Grammar.Values
import GF.Grammar.Grammar import GF.Grammar.Grammar
import PGF.Data (ppMeta, ppLit) import PGF.Internal (ppMeta, ppLit, ppFId, ppFunId, ppSeqId, ppSeq)
import PGF.Printer (ppFId, ppFunId, ppSeqId, ppSeq)
import Text.PrettyPrint import Text.PrettyPrint
import Data.Maybe (isNothing) import Data.Maybe (isNothing)

View File

@@ -30,7 +30,7 @@ import qualified Data.ByteString.Char8 as BS(append,isPrefixOf)
-- Limit use of BS functions to the ones that work correctly on -- Limit use of BS functions to the ones that work correctly on
-- UTF-8-encoded bytestrings! -- UTF-8-encoded bytestrings!
import Data.Char(isDigit) import Data.Char(isDigit)
import Data.Binary(Binary(..)) import PGF.Internal(Binary(..))
import Text.PrettyPrint(Doc,text) import Text.PrettyPrint(Doc,text)

View File

@@ -43,7 +43,7 @@ import GF.Data.Operations(Err,ErrorMonad(..),liftErr)
import Data.Set (Set) import Data.Set (Set)
import qualified Data.Set as Set import qualified Data.Set as Set
import PGF.Data(Literal(..)) import PGF.Internal(Literal(..))
usageHeader :: String usageHeader :: String
usageHeader = unlines usageHeader = unlines

View File

@@ -14,8 +14,7 @@ import qualified Data.Map as Map
import Data.Set (Set) import Data.Set (Set)
import qualified Data.Set as Set import qualified Data.Set as Set
--import PGF.CId import PGF.Internal
import PGF.Data
import GF.Data.Utilities import GF.Data.Utilities
import GF.Grammar.CFG import GF.Grammar.CFG
--import GF.Speech.PGFToCFG --import GF.Speech.PGFToCFG

View File

@@ -18,8 +18,7 @@ import GF.Grammar.CFG
import GF.Speech.RegExp import GF.Speech.RegExp
import GF.Speech.SISR import GF.Speech.SISR
import GF.Speech.SRG import GF.Speech.SRG
--import PGF.CId import PGF
import PGF.Data
import Data.Char import Data.Char
import Data.List import Data.List

View File

@@ -7,8 +7,7 @@
module GF.Speech.PGFToCFG (bnfPrinter, pgfToCFG) where module GF.Speech.PGFToCFG (bnfPrinter, pgfToCFG) where
import PGF(showCId) import PGF(showCId)
import PGF.Data as PGF import PGF.Internal as PGF
import PGF.Macros
--import GF.Infra.Ident --import GF.Infra.Ident
import GF.Grammar.CFG hiding (Symbol) import GF.Grammar.CFG hiding (Symbol)

View File

@@ -12,8 +12,7 @@ module GF.Speech.VoiceXML (grammar2vxml) where
import GF.Data.XML import GF.Data.XML
--import GF.Infra.Ident --import GF.Infra.Ident
import PGF import PGF
import PGF.Data import PGF.Internal
import PGF.Macros
--import Control.Monad (liftM) --import Control.Monad (liftM)
import Data.List (intersperse) -- isPrefixOf, find import Data.List (intersperse) -- isPrefixOf, find

View File

@@ -2,10 +2,8 @@ module GFC (mainGFC, writePGF) where
-- module Main where -- module Main where
import PGF import PGF
--import PGF.CId import PGF.Internal(PGF(..),code,funs,cats,optimizePGF,unionPGF)
import PGF.Data import PGF.Internal(putSplitAbs)
import PGF.Optimize
import PGF.Binary(putSplitAbs)
import GF.Compile import GF.Compile
import GF.Compile.Export import GF.Compile.Export
import GF.Compile.CFGtoPGF import GF.Compile.CFGtoPGF
@@ -19,8 +17,7 @@ import GF.Data.ErrM
import GF.System.Directory import GF.System.Directory
import Data.Maybe import Data.Maybe
import Data.Binary(encode,encodeFile) import PGF.Internal(encode,encodeFile,runPut)
import Data.Binary.Put(runPut)
import qualified Data.Map as Map import qualified Data.Map as Map
import qualified Data.Set as Set import qualified Data.Set as Set
import qualified Data.ByteString as BSS import qualified Data.ByteString as BSS

View File

@@ -29,8 +29,7 @@ import qualified System.Console.Haskeline as Haskeline
--import GF.Compile.Coding(codeTerm) --import GF.Compile.Coding(codeTerm)
import PGF import PGF
import PGF.Data import PGF.Internal(emptyPGF,abstract,funs,lookStartCat)
import PGF.Macros
import Data.Char import Data.Char
import Data.List(nub,isPrefixOf,isInfixOf,partition) import Data.List(nub,isPrefixOf,isInfixOf,partition)

View File

@@ -17,7 +17,7 @@ import GF.Grammar.Printer(ppParams,ppTerm,getAbs,TermPrintQual(..))
import GF.Grammar.Parser(runP,pModDef) import GF.Grammar.Parser(runP,pModDef)
import GF.Grammar.Lexer(Posn(..)) import GF.Grammar.Lexer(Posn(..))
import GF.Data.ErrM import GF.Data.ErrM
import PGF.Data(Literal(LStr)) import PGF.Internal(Literal(LStr))
import SimpleEditor.Syntax as S import SimpleEditor.Syntax as S
import SimpleEditor.JSON import SimpleEditor.JSON

View File

@@ -1,4 +1,13 @@
{-# LANGUAGE ExistentialQuantification, DeriveDataTypeable #-} {-# LANGUAGE ExistentialQuantification, DeriveDataTypeable #-}
-------------------------------------------------
-- |
-- Maintainer : Krasimir Angelov
-- Stability : stable
-- Portability : portable
--
-- This is the Haskell binding to the C run-time system for
-- loading and interpreting grammars compiled in Portable Grammar Format (PGF).
-------------------------------------------------
#include <pgf/pgf.h> #include <pgf/pgf.h>
#include <gu/enum.h> #include <gu/enum.h>
#include <gu/exn.h> #include <gu/exn.h>

View File

@@ -0,0 +1,18 @@
{-# OPTIONS_HADDOCK hide #-}
-------------------------------------------------
-- |
-- Stability : unstable
--
-------------------------------------------------
module PGF.Internal(module Internal) where
import PGF.Binary as Internal
import PGF.Data as Internal
import PGF.Macros as Internal
import PGF.Optimize as Internal
import PGF.Printer as Internal
import PGF.Utilities as Internal
import Data.Binary as Internal
import Data.Binary.Get as Internal
import Data.Binary.IEEE754 as Internal
import Data.Binary.Put as Internal

View File

@@ -3,10 +3,10 @@ module PGF.Utilities where
import Data.Set(empty,member,insert) import Data.Set(empty,member,insert)
-- | Like 'nub', but O(n log n) instead of O(n^2), since it uses a set to lookup previous things. -- | Like 'Data.List.nub', but O(n log n) instead of O(n^2), since it uses a set to lookup previous things.
-- The result list is stable (the elements are returned in the order they occur), and lazy. -- The result list is stable (the elements are returned in the order they occur), and lazy.
-- Requires that the list elements can be compared by Ord. -- Requires that the list elements can be compared by Ord.
-- Code ruthlessly taken from http://hpaste.org/54411 -- Code ruthlessly taken from <http://hpaste.org/54411>
nub' :: Ord a => [a] -> [a] nub' :: Ord a => [a] -> [a]
nub' = loop empty nub' = loop empty
where loop _ [] = [] where loop _ [] = []