1
0
forked from GitHub/gf-core

merged gfc and gfi to one binary, and a shell script for gfc

This commit is contained in:
aarne
2007-11-12 09:17:02 +00:00
parent 980ec19999
commit 2c10d62b1f
7 changed files with 115 additions and 150 deletions

3
bin/gfc Normal file
View File

@@ -0,0 +1,3 @@
#!/bin/sh
GFBIN=/usr/local/bin/gf3
exec $GFBIN --batch ${1+"$@"}

14
src/GF/Devel/GF.hs Normal file
View File

@@ -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

View File

@@ -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
}

View File

@@ -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

View File

@@ -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)

View File

@@ -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
printHelp grammar = do
putStrLn $ "languages: " ++ unwords (languages grammar)
putStrLn $ "categories: " ++ unwords (categories grammar)
--- putStrLn commands
-- 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
{- obsolete
-- ordinary commands, working on CommandEnv
_ -> do
interpretCommandLine env s
loopNewCPU gfenv
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"
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. "
]
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
}

View File

@@ -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/