summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gf.cabal259
-rw-r--r--src/compiler/GF.hs61
-rw-r--r--src/compiler/GF/Infra/UseIO.hs2
-rw-r--r--src/compiler/GF/Main.hs48
-rw-r--r--src/programs/gf.hs3
5 files changed, 235 insertions, 138 deletions
diff --git a/gf.cabal b/gf.cabal
index 1fa979a60..cc0c53a5a 100644
--- a/gf.cabal
+++ b/gf.cabal
@@ -1,5 +1,5 @@
name: gf
-version: 3.6-darcs
+version: 3.6.10-darcs
cabal-version: >= 1.10
build-type: Custom
@@ -89,8 +89,8 @@ Library
build-depends: binary, data-binary-ieee754
ghc-options: -fwarn-unused-imports
- if impl(ghc>=7.8)
- ghc-options: +RTS -A20M -RTS
+--if impl(ghc>=7.8)
+-- ghc-options: +RTS -A20M -RTS
ghc-prof-options: -fprof-auto
extensions:
@@ -133,126 +133,146 @@ Library
c-sources: src/runtime/haskell-bind/utils.c
cc-options: -std=c99
-Executable gf
- default-language: Haskell2010
- build-depends: gf,
- base >= 4.3 && <5,
- array,
- containers,
- bytestring,
- filepath,
- fst,
- directory,
- random,
- time,
- time-compat,
- old-locale,
- process,
- pretty,
- mtl,
- haskeline,
- parallel>=3,
- utf8-string
- ghc-options: -threaded -fwarn-unused-imports
- if flag(server)
- build-depends: httpd-shed>=0.4.0.2, network>=2.3 && <2.6, json, cgi
- -- ,silently
- cpp-options: -DSERVER_MODE
- other-modules: GF.Server
- hs-source-dirs: src/server src/server/transfer src/example-based
-
- if flag(c-runtime)
- cpp-options: -DC_RUNTIME
-
- if impl(ghc>=7.0)
- ghc-options: -rtsopts
- if impl(ghc<7.8)
- ghc-options: -with-rtsopts=-K64M
+---- GF compiler as a library:
- if impl(ghc>=7.8)
- build-tools: happy>=1.19, alex>=3.1
- ghc-options: +RTS -A20M -RTS
- else
- build-tools: happy, alex>=3
+ build-depends: filepath, directory, time, time-compat, old-locale,
+ process, haskeline, parallel>=3
- if os(windows)
- build-depends: Win32
- else
- build-depends: unix
+ hs-source-dirs: src/compiler
+ exposed-modules:
+ GF
- ghc-prof-options: -auto-all
+ other-modules:
+ GF.Main GF.Compiler GF.Interactive
- hs-source-dirs: src/compiler
+ GF.Compile GF.CompileInParallel GF.CompileOne GF.Compile.GetGrammar
+ GF.Grammar
- if !flag(custom-binary)
- build-depends: binary, data-binary-ieee754
+ GF.Data.Operations GF.Infra.Option GF.Infra.UseIO
- extensions:
- main-is: GF.hs
- other-modules:
- GF.Data.BacktrackM
- GF.Data.Utilities
--- GF.Data.SortedList
- GF.Data.ErrM
- GF.Data.Operations
- GF.Data.Str
- GF.JavaScript.AbsJS
- GF.JavaScript.PrintJS
- GF.Infra.Ident
- GF.Infra.GetOpt
- GF.Infra.Option
- GF.Infra.UseIO
- GF.Infra.CheckM
- GF.System.Catch
- GF.System.Console
- GF.System.Signal
+ DarcsVersion_gf
+ GF.Command.Abstract
GF.Command.Commands
+ GF.Command.Importing
GF.Command.Interpreter
- GF.Command.Abstract
+ GF.Command.Messages
GF.Command.Parse
- GF.Command.Importing
- GF.Grammar
- GF.Grammar.Lexer
- GF.Grammar.Parser
- GF.Grammar.Grammar
- GF.Grammar.Values
- GF.Grammar.Macros
- GF.Grammar.Lockfield
- GF.Grammar.MMacros
- GF.Grammar.Lookup
- GF.Grammar.Unify
- GF.Grammar.PatternMatch
- GF.Grammar.Printer
- GF.Grammar.ShowTerm
- GF.Grammar.Binary
- GF.Compile.Update
+ GF.Command.TreeOperations
+ GF.Compile.CFGtoPGF
GF.Compile.CheckGrammar
--- GF.Compile.Refresh
- GF.Compile.Rename
- GF.Compile.ReadFiles
+ GF.Compile.Compute.AppPredefined
+ GF.Compile.Compute.ConcreteNew
+ GF.Compile.Compute.ConcreteNew1
+ GF.Compile.Compute.Predef
+ GF.Compile.Compute.Value
+ GF.Compile.ExampleBased
+ GF.Compile.Export
+ GF.Compile.GenerateBC
+ GF.Compile.GeneratePMCFG
GF.Compile.GrammarToPGF
+ GF.Compile.Multi
+ GF.Compile.Optimize
+ GF.Compile.PGFtoHaskell
+ GF.Compile.PGFtoJS
+ GF.Compile.PGFtoLProlog
+ 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.Concrete
GF.Compile.TypeCheck.ConcreteNew
+ GF.Compile.TypeCheck.Primitives
+ GF.Compile.TypeCheck.RConcrete
GF.Compile.TypeCheck.TC
- GF.Compile.Compute.Abstract
--- GF.Compile.Compute.Concrete
- GF.Compile.Compute.ConcreteNew1
- GF.Compile.Compute.ConcreteNew
- GF.Compile.Compute.AppPredefined
- GF.Compile.Compute.Value
- GF.Compile.Compute.Predef
- GF.Compile.Optimize
- GF.Compile.SubExOpt
- GF.Compile.GetGrammar
- GF.Compile.PGFtoHaskell
- GF.Compile.PGFtoProlog
- GF.Compile.PGFtoJS
- GF.Compile
+ GF.Compile.Update
+ GF.Data.BacktrackM
+ GF.Data.ErrM
+ GF.Data.Graph
+ GF.Data.Graphviz
+ GF.Data.Relation
+ GF.Data.Str
+ GF.Data.Utilities
+ GF.Data.XML
+ GF.Grammar.Analyse
+ GF.Grammar.Binary
+ GF.Grammar.CFG
+ GF.Grammar.EBNF
+ GF.Grammar.Grammar
+ GF.Grammar.Lexer
+ GF.Grammar.Lockfield
+ GF.Grammar.Lookup
+ GF.Grammar.MMacros
+ 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.Infra.BuildInfo
+ GF.Infra.CheckM
+ GF.Infra.Concurrency
+ GF.Infra.Dependencies
+ GF.Infra.GetOpt
+ GF.Infra.Ident
+ GF.Infra.Location
+ GF.Infra.SIO
+ GF.JavaScript.AbsJS
+ GF.JavaScript.PrintJS
GF.Quiz
- GF.Compiler
- GF.Interactive
+ 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.System.Catch
+ GF.System.Console
+ GF.System.Directory
+ GF.System.Process
+ GF.System.Signal
+ GF.System.UseSignal
+ GF.Text.Clitics
+ GF.Text.Coding
+ GF.Text.Lexing
+ GF.Text.Pretty
+ GF.Text.Transliterations
+ Paths_gf
+
+ if flag(c-runtime)
+ cpp-options: -DC_RUNTIME
+
+ if flag(server)
+ build-depends: httpd-shed>=0.4.0.2, network>=2.3 && <2.6, json, cgi
+ -- ,silently
+ cpp-options: -DSERVER_MODE
+ other-modules:
+ GF.Server
+ PGFService
+ RunHTTP
+ SimpleEditor.Convert
+ SimpleEditor.JSON
+ SimpleEditor.Syntax
+ URLEncoding
+ CGI
+ CGIUtils
+ Cache
+ Fold
+ ExampleDemo
+ ExampleService
+ hs-source-dirs: src/server src/server/transfer src/example-based
if flag(interrupt)
cpp-options: -DUSE_INTERRUPT
@@ -260,6 +280,33 @@ Executable gf
else
other-modules: GF.System.NoSignal
+ if impl(ghc>=7.8)
+ build-tools: happy>=1.19, alex>=3.1
+-- ghc-options: +RTS -A20M -RTS
+ else
+ build-tools: happy, alex>=3
+
+ if os(windows)
+ build-depends: Win32
+ else
+ build-depends: unix
+
+
+Executable gf
+ hs-source-dirs: src/programs
+ main-is: gf.hs
+ default-language: Haskell2010
+ build-depends: gf, base
+ ghc-options: -threaded -fwarn-unused-imports
+
+ if impl(ghc>=7.0)
+ ghc-options: -rtsopts
+ if impl(ghc<7.8)
+ ghc-options: -with-rtsopts=-K64M
+
+ ghc-prof-options: -auto-all
+
+
executable pgf-shell
if !flag(c-runtime)
buildable: False
diff --git a/src/compiler/GF.hs b/src/compiler/GF.hs
index cb63cadbe..bdb3e9b48 100644
--- a/src/compiler/GF.hs
+++ b/src/compiler/GF.hs
@@ -1,37 +1,36 @@
-module Main where
+module GF(
+ -- * Command line interface
+ module GF.Main,
+ module GF.Compiler,
+ module GF.Interactive,
+ -- * Compiling GF grammars
+ module GF.Compile,
+ module GF.CompileInParallel,
+ module GF.CompileOne,
+
+ -- * Abstract syntax, parsing and pretty printing
+ module GF.Compile.GetGrammar,
+ module GF.Grammar,
+
+ -- * Supporting infrastructure and system utilities
+ module GF.Data.Operations,
+ module GF.Infra.UseIO,
+ module GF.Infra.Option,
+ module GF.System.Console
+ ) where
+import GF.Main
import GF.Compiler
import GF.Interactive
-import GF.Data.ErrM
-import GF.Infra.Option
-import GF.Infra.UseIO
-import GF.Infra.BuildInfo (buildInfo)
-import Paths_gf
-import Data.Version
-import System.Directory
-import System.Environment (getArgs)
-import System.Exit
-import GF.System.Console (setConsoleEncoding)
+import GF.Compile
+import GF.CompileInParallel
+import GF.CompileOne
-main :: IO ()
-main = do
- setConsoleEncoding
- args <- getArgs
- case parseOptions args of
- Ok (opts,files) -> do curr_dir <- getCurrentDirectory
- lib_dir <- getLibraryDirectory opts
- mainOpts (fixRelativeLibPaths curr_dir lib_dir opts) files
- Bad err -> do ePutStrLn err
- ePutStrLn "You may want to try --help."
- exitFailure
+import GF.Compile.GetGrammar
+import GF.Grammar
-mainOpts :: Options -> [FilePath] -> IO ()
-mainOpts opts files =
- case flag optMode opts of
- ModeVersion -> putStrLn $ "Grammatical Framework (GF) version " ++ showVersion version ++ "\n" ++ buildInfo
- ModeHelp -> putStrLn helpMessage
- ModeInteractive -> mainGFI opts files
- ModeRun -> mainRunGFI opts files
- ModeServer port -> mainServerGFI opts port files
- ModeCompiler -> mainGFC opts files
+import GF.Data.Operations
+import GF.Infra.Option
+import GF.Infra.UseIO
+import GF.System.Console
diff --git a/src/compiler/GF/Infra/UseIO.hs b/src/compiler/GF/Infra/UseIO.hs
index e0477c1fc..58010f7f9 100644
--- a/src/compiler/GF/Infra/UseIO.hs
+++ b/src/compiler/GF/Infra/UseIO.hs
@@ -12,7 +12,7 @@
-- (Description of the module)
-----------------------------------------------------------------------------
-module GF.Infra.UseIO(module GF.Infra.UseIO,liftErr,
+module GF.Infra.UseIO(module GF.Infra.UseIO,
-- ** Reused
MonadIO(..),liftErr) where
diff --git a/src/compiler/GF/Main.hs b/src/compiler/GF/Main.hs
new file mode 100644
index 000000000..c7656248f
--- /dev/null
+++ b/src/compiler/GF/Main.hs
@@ -0,0 +1,48 @@
+-- | GF main program (grammar compiler, interactive shell, http server)
+module GF.Main where
+import GF.Compiler
+import GF.Interactive
+import GF.Data.ErrM
+import GF.Infra.Option
+import GF.Infra.UseIO
+import GF.Infra.BuildInfo (buildInfo)
+import Paths_gf
+
+import Data.Version
+import System.Directory
+import System.Environment (getArgs)
+import System.Exit
+import GF.System.Console (setConsoleEncoding)
+
+-- | Run the GF main program, taking arguments from the command line.
+-- (It calls 'setConsoleEncoding' and 'getOptions', then 'mainOpts'.)
+-- Run @gf --help@ for usage info.
+main :: IO ()
+main = do
+ setConsoleEncoding
+ uncurry mainOpts =<< getOptions
+
+-- | Get and parse GF command line arguments. Fix relative paths.
+getOptions = do
+ args <- getArgs
+ case parseOptions args of
+ Ok (opts,files) -> do curr_dir <- getCurrentDirectory
+ lib_dir <- getLibraryDirectory opts
+ return (fixRelativeLibPaths curr_dir lib_dir opts, files)
+ Bad err -> do ePutStrLn err
+ ePutStrLn "You may want to try --help."
+ exitFailure
+
+
+-- | Run the GF main program with the given options and files. Depending on
+-- the options it invokes 'mainGFC', 'mainGFI', 'mainRunGFI', 'mainServerGFI',
+-- or it just prints version/usage info.
+mainOpts :: Options -> [FilePath] -> IO ()
+mainOpts opts files =
+ case flag optMode opts of
+ ModeVersion -> putStrLn $ "Grammatical Framework (GF) version " ++ showVersion version ++ "\n" ++ buildInfo
+ ModeHelp -> putStrLn helpMessage
+ ModeInteractive -> mainGFI opts files
+ ModeRun -> mainRunGFI opts files
+ ModeServer port -> mainServerGFI opts port files
+ ModeCompiler -> mainGFC opts files
diff --git a/src/programs/gf.hs b/src/programs/gf.hs
new file mode 100644
index 000000000..1dae54bc7
--- /dev/null
+++ b/src/programs/gf.hs
@@ -0,0 +1,3 @@
+import qualified GF
+
+main = GF.main