summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoraarne <aarne@cs.chalmers.se>2007-11-12 09:17:02 +0000
committeraarne <aarne@cs.chalmers.se>2007-11-12 09:17:02 +0000
commitb801149fbf5c9eb3f73477d3496cdfd92cb178a1 (patch)
tree332b6a3ec1b3b56b9ed1d8e19f175f10df970119
parenteb7b0286016714128aae742b4cedccc3dc30a9a0 (diff)
merged gfc and gfi to one binary, and a shell script for gfc
-rw-r--r--bin/gfc3
-rw-r--r--src/GF/Devel/GF.hs14
-rw-r--r--src/GF/Devel/GF3.hs79
-rw-r--r--src/GF/Devel/GFC.hs9
-rw-r--r--src/GF/Devel/GFCCInterpreter.hs28
-rw-r--r--src/GF/Devel/GFI.hs120
-rw-r--r--src/Makefile12
7 files changed, 115 insertions, 150 deletions
diff --git a/bin/gfc b/bin/gfc
new file mode 100644
index 000000000..5b4242a6c
--- /dev/null
+++ b/bin/gfc
@@ -0,0 +1,3 @@
+#!/bin/sh
+GFBIN=/usr/local/bin/gf3
+exec $GFBIN --batch ${1+"$@"}
diff --git a/src/GF/Devel/GF.hs b/src/GF/Devel/GF.hs
new file mode 100644
index 000000000..70fddcd67
--- /dev/null
+++ b/src/GF/Devel/GF.hs
@@ -0,0 +1,14 @@
+module Main where
+
+import GF.Devel.GFC
+import GF.Devel.GFI
+
+import System (getArgs)
+
+main :: IO ()
+main = do
+ xx <- getArgs
+ case xx of
+ "--batch":args -> mainGFC args
+ _ -> mainGFI xx
+
diff --git a/src/GF/Devel/GF3.hs b/src/GF/Devel/GF3.hs
deleted file mode 100644
index e6d2b1bc3..000000000
--- a/src/GF/Devel/GF3.hs
+++ /dev/null
@@ -1,79 +0,0 @@
-module Main where
-
-import GF.Command.Interpreter
-import GF.Command.Importing
-import GF.Command.Commands
-import GF.GFCC.API
-
-import GF.Devel.UseIO
-import GF.Devel.Arch
-import GF.Infra.Option ---- Haskell's option lib
-
-import System (getArgs)
-
-main :: IO ()
-main = do
- putStrLn welcome
- xx <- getArgs
- env <- importInEnv emptyMultiGrammar xx
- loop (GFEnv env [] 0)
- return ()
-
-loop :: GFEnv -> IO GFEnv
-loop gfenv0 = do
- let env = commandenv gfenv0
- putStrFlush (prompt env)
- s <- getLine
- let gfenv = gfenv0 {history = s : history gfenv0}
- case words s of
-
- -- special commands, working on GFEnv
- "i":args -> do
- env1 <- importInEnv (multigrammar env) args
- loopNewCPU $ gfenv {commandenv = env1}
- "e":_ -> loopNewCPU $ gfenv {commandenv=env{multigrammar=emptyMultiGrammar}}
- "ph":_ -> mapM_ putStrLn (reverse (history gfenv0)) >> loopNewCPU gfenv
- "q":_ -> putStrLn "See you." >> return gfenv
-
- -- ordinary commands, working on CommandEnv
- _ -> do
- interpretCommandLine env s
- loopNewCPU gfenv
-
-loopNewCPU gfenv = do
- cpu <- prCPU $ cputime gfenv
- loop $ gfenv {cputime = cpu}
-
-importInEnv mgr0 xx = do
- let (opts,files) = getOptions "-" xx
- mgr1 <- case files of
- [] -> return mgr0
- _ -> importGrammar mgr0 opts files
- let env = CommandEnv mgr1 (allCommands mgr1)
- putStrLn $ unwords $ "\nLanguages:" : languages mgr1
- return env
-
-welcome = unlines [
- " ",
- " * * * ",
- " * * ",
- " * * ",
- " * ",
- " * ",
- " * * * * * * * ",
- " * * * ",
- " * * * * * * ",
- " * * * ",
- " * * * ",
- " ",
- "This is GF version 3.0 alpha. ",
- "Some things may work. "
- ]
-
-prompt env = abstractName (multigrammar env) ++ "> "
-
-data GFEnv = GFEnv {
- commandenv :: CommandEnv,
- history :: [String],
- cputime :: Integer
- }
diff --git a/src/GF/Devel/GFC.hs b/src/GF/Devel/GFC.hs
index 917a469e9..d074cf4fe 100644
--- a/src/GF/Devel/GFC.hs
+++ b/src/GF/Devel/GFC.hs
@@ -1,4 +1,5 @@
-module Main where
+module GF.Devel.GFC (mainGFC) where
+-- module Main where
import GF.Devel.Compile
import GF.Devel.PrintGFCC
@@ -10,10 +11,8 @@ import GF.GFCC.ParGFCC
import GF.Devel.UseIO
import GF.Infra.Option
-import System
-
-main = do
- xx <- getArgs
+mainGFC :: [String] -> IO ()
+mainGFC xx = do
let (opts,fs) = getOptions "-" xx
case opts of
_ | oElem (iOpt "help") opts -> putStrLn usageMsg
diff --git a/src/GF/Devel/GFCCInterpreter.hs b/src/GF/Devel/GFCCInterpreter.hs
new file mode 100644
index 000000000..b2b17dba7
--- /dev/null
+++ b/src/GF/Devel/GFCCInterpreter.hs
@@ -0,0 +1,28 @@
+module Main where
+
+import GF.Command.Interpreter
+import GF.Command.Commands
+import GF.GFCC.API
+import System (getArgs)
+import Data.Char (isDigit)
+
+-- Simple translation application built on GFCC. AR 7/9/2006 -- 19/9/2007
+
+main :: IO ()
+main = do
+ file:_ <- getArgs
+ grammar <- file2grammar file
+ let env = CommandEnv grammar (allCommands grammar)
+ printHelp grammar
+ loop env
+
+loop :: CommandEnv -> IO ()
+loop env = do
+ s <- getLine
+ if s == "q" then return () else do
+ interpretCommandLine env s
+ loop env
+
+printHelp grammar = do
+ putStrLn $ "languages: " ++ unwords (languages grammar)
+ putStrLn $ "categories: " ++ unwords (categories grammar)
diff --git a/src/GF/Devel/GFI.hs b/src/GF/Devel/GFI.hs
index 1d88a24a0..f59bd15e6 100644
--- a/src/GF/Devel/GFI.hs
+++ b/src/GF/Devel/GFI.hs
@@ -1,71 +1,77 @@
-module Main where
+module GF.Devel.GFI (mainGFI) where
import GF.Command.Interpreter
+import GF.Command.Importing
import GF.Command.Commands
import GF.GFCC.API
-import System (getArgs)
-import Data.Char (isDigit)
--- Simple translation application built on GFCC. AR 7/9/2006 -- 19/9/2007
+import GF.Devel.UseIO
+import GF.Devel.Arch
+import GF.Infra.Option ---- Haskell's option lib
-main :: IO ()
-main = do
- file:_ <- getArgs
- grammar <- file2grammar file
- let env = CommandEnv grammar (allCommands grammar)
- printHelp grammar
- loop env
-loop :: CommandEnv -> IO ()
-loop env = do
+mainGFI :: [String] -> IO ()
+mainGFI xx = do
+ putStrLn welcome
+ env <- importInEnv emptyMultiGrammar xx
+ loop (GFEnv env [] 0)
+ return ()
+
+loop :: GFEnv -> IO GFEnv
+loop gfenv0 = do
+ let env = commandenv gfenv0
+ putStrFlush (prompt env)
s <- getLine
- if s == "q" then return () else do
- interpretCommandLine env s
- loop env
+ let gfenv = gfenv0 {history = s : history gfenv0}
+ case words s of
+
+ -- special commands, working on GFEnv
+ "i":args -> do
+ env1 <- importInEnv (multigrammar env) args
+ loopNewCPU $ gfenv {commandenv = env1}
+ "e":_ -> loopNewCPU $ gfenv {commandenv=env{multigrammar=emptyMultiGrammar}}
+ "ph":_ -> mapM_ putStrLn (reverse (history gfenv0)) >> loopNewCPU gfenv
+ "q":_ -> putStrLn "See you." >> return gfenv
+
+ -- ordinary commands, working on CommandEnv
+ _ -> do
+ interpretCommandLine env s
+ loopNewCPU gfenv
-printHelp grammar = do
- putStrLn $ "languages: " ++ unwords (languages grammar)
- putStrLn $ "categories: " ++ unwords (categories grammar)
---- putStrLn commands
+loopNewCPU gfenv = do
+ cpu <- prCPU $ cputime gfenv
+ loop $ gfenv {cputime = cpu}
-{- obsolete
+importInEnv mgr0 xx = do
+ let (opts,files) = getOptions "-" xx
+ mgr1 <- case files of
+ [] -> return mgr0
+ _ -> importGrammar mgr0 opts files
+ let env = CommandEnv mgr1 (allCommands mgr1)
+ putStrLn $ unwords $ "\nLanguages:" : languages mgr1
+ return env
-commands = unlines [
- "Commands:",
- " (gt | gtt | gr | grt) Cat Num - generate all or random",
- " p Lang Cat String - parse (unquoted) string",
- " l Tree - linearize in all languages",
- " h - help",
- " q - quit"
+welcome = unlines [
+ " ",
+ " * * * ",
+ " * * ",
+ " * * ",
+ " * ",
+ " * ",
+ " * * * * * * * ",
+ " * * * ",
+ " * * * * * * ",
+ " * * * ",
+ " * * * ",
+ " ",
+ "This is GF version 3.0 alpha. ",
+ "Some things may work. "
]
-treat :: MultiGrammar -> String -> IO ()
-treat mgr s = case words s of
- "gt" :cat:n:_ -> mapM_ prlinonly $ take (read1 n) $ generateAll mgr cat
- "gtt":cat:n:_ -> mapM_ prlin $ take (read1 n) $ generateAll mgr cat
- "gr" :cat:n:_ -> generateRandom mgr cat >>= mapM_ prlinonly . take (read1 n)
- "grt":cat:n:_ -> generateRandom mgr cat >>= mapM_ prlin . take (read1 n)
- "p":lang:cat:ws -> do
- let ts = parse mgr lang cat $ unwords ws
- mapM_ (putStrLn . showTree) ts
- "h":_ -> printHelp mgr
- "l" : ws -> lins $ readTree mgr $ unwords ws
- where
- grammar = gfcc mgr
- langs = languages mgr
- lins t = mapM_ (lint t) $ langs
- lint t lang = do
----- putStrLn $ showTree $ linExp grammar lang t
- lin t lang
- lin t lang = do
- putStrLn $ linearize mgr lang t
- prlins t = do
- putStrLn $ showTree t
- lins t
- prlin t = do
- putStrLn $ showTree t
- prlinonly t
- prlinonly t = mapM_ (lin t) $ langs
- read1 s = if all isDigit s then read s else 1
--}
+prompt env = abstractName (multigrammar env) ++ "> "
+data GFEnv = GFEnv {
+ commandenv :: CommandEnv,
+ history :: [String],
+ cputime :: Integer
+ }
diff --git a/src/Makefile b/src/Makefile
index 99a8c9304..13723371d 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -193,18 +193,12 @@ gfdoc: tools/$(GF_DOC_EXE)
tools/$(GF_DOC_EXE): tools/GFDoc.hs
$(GHMAKE) $(GHCOPTFLAGS) -o $@ $^
-gfc:
- $(GHMAKE) $(GHCOPTFLAGS) -o gfc GF/Devel/GFC.hs
- strip gfc
- mv gfc ../bin/
+gfc: gf3
-gfi:
- $(GHMAKE) $(GHCOPTFLAGS) -o gfi GF/Devel/GFI.hs
- strip gfi
- mv gfi ../bin/
+gfi: gf3
gf3:
- $(GHMAKE) $(GHCOPTFLAGS) -o gf3 GF/Devel/GF3.hs
+ $(GHMAKE) $(GHCOPTFLAGS) -o gf3 GF/Devel/GF.hs
strip gf3
mv gf3 ../bin/