mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-22 19:22:50 -06:00
merged gfc and gfi to one binary, and a shell script for gfc
This commit is contained in:
3
bin/gfc
Normal file
3
bin/gfc
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
GFBIN=/usr/local/bin/gf3
|
||||||
|
exec $GFBIN --batch ${1+"$@"}
|
||||||
14
src/GF/Devel/GF.hs
Normal file
14
src/GF/Devel/GF.hs
Normal 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
|
||||||
|
|
||||||
@@ -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
|
|
||||||
}
|
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
module Main where
|
module GF.Devel.GFC (mainGFC) where
|
||||||
|
-- module Main where
|
||||||
|
|
||||||
import GF.Devel.Compile
|
import GF.Devel.Compile
|
||||||
import GF.Devel.PrintGFCC
|
import GF.Devel.PrintGFCC
|
||||||
@@ -10,10 +11,8 @@ import GF.GFCC.ParGFCC
|
|||||||
import GF.Devel.UseIO
|
import GF.Devel.UseIO
|
||||||
import GF.Infra.Option
|
import GF.Infra.Option
|
||||||
|
|
||||||
import System
|
mainGFC :: [String] -> IO ()
|
||||||
|
mainGFC xx = do
|
||||||
main = do
|
|
||||||
xx <- getArgs
|
|
||||||
let (opts,fs) = getOptions "-" xx
|
let (opts,fs) = getOptions "-" xx
|
||||||
case opts of
|
case opts of
|
||||||
_ | oElem (iOpt "help") opts -> putStrLn usageMsg
|
_ | oElem (iOpt "help") opts -> putStrLn usageMsg
|
||||||
|
|||||||
28
src/GF/Devel/GFCCInterpreter.hs
Normal file
28
src/GF/Devel/GFCCInterpreter.hs
Normal 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)
|
||||||
@@ -1,71 +1,77 @@
|
|||||||
module Main where
|
module GF.Devel.GFI (mainGFI) where
|
||||||
|
|
||||||
import GF.Command.Interpreter
|
import GF.Command.Interpreter
|
||||||
|
import GF.Command.Importing
|
||||||
import GF.Command.Commands
|
import GF.Command.Commands
|
||||||
import GF.GFCC.API
|
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 ()
|
mainGFI :: [String] -> IO ()
|
||||||
loop env = do
|
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
|
s <- getLine
|
||||||
if s == "q" then return () else do
|
let gfenv = gfenv0 {history = s : history gfenv0}
|
||||||
interpretCommandLine env s
|
case words s of
|
||||||
loop env
|
|
||||||
|
|
||||||
printHelp grammar = do
|
-- special commands, working on GFEnv
|
||||||
putStrLn $ "languages: " ++ unwords (languages grammar)
|
"i":args -> do
|
||||||
putStrLn $ "categories: " ++ unwords (categories grammar)
|
env1 <- importInEnv (multigrammar env) args
|
||||||
--- putStrLn commands
|
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 [
|
loopNewCPU gfenv = do
|
||||||
"Commands:",
|
cpu <- prCPU $ cputime gfenv
|
||||||
" (gt | gtt | gr | grt) Cat Num - generate all or random",
|
loop $ gfenv {cputime = cpu}
|
||||||
" p Lang Cat String - parse (unquoted) string",
|
|
||||||
" l Tree - linearize in all languages",
|
importInEnv mgr0 xx = do
|
||||||
" h - help",
|
let (opts,files) = getOptions "-" xx
|
||||||
" q - quit"
|
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 ()
|
prompt env = abstractName (multigrammar env) ++ "> "
|
||||||
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
|
|
||||||
-}
|
|
||||||
|
|
||||||
|
data GFEnv = GFEnv {
|
||||||
|
commandenv :: CommandEnv,
|
||||||
|
history :: [String],
|
||||||
|
cputime :: Integer
|
||||||
|
}
|
||||||
|
|||||||
12
src/Makefile
12
src/Makefile
@@ -193,18 +193,12 @@ gfdoc: tools/$(GF_DOC_EXE)
|
|||||||
tools/$(GF_DOC_EXE): tools/GFDoc.hs
|
tools/$(GF_DOC_EXE): tools/GFDoc.hs
|
||||||
$(GHMAKE) $(GHCOPTFLAGS) -o $@ $^
|
$(GHMAKE) $(GHCOPTFLAGS) -o $@ $^
|
||||||
|
|
||||||
gfc:
|
gfc: gf3
|
||||||
$(GHMAKE) $(GHCOPTFLAGS) -o gfc GF/Devel/GFC.hs
|
|
||||||
strip gfc
|
|
||||||
mv gfc ../bin/
|
|
||||||
|
|
||||||
gfi:
|
gfi: gf3
|
||||||
$(GHMAKE) $(GHCOPTFLAGS) -o gfi GF/Devel/GFI.hs
|
|
||||||
strip gfi
|
|
||||||
mv gfi ../bin/
|
|
||||||
|
|
||||||
gf3:
|
gf3:
|
||||||
$(GHMAKE) $(GHCOPTFLAGS) -o gf3 GF/Devel/GF3.hs
|
$(GHMAKE) $(GHCOPTFLAGS) -o gf3 GF/Devel/GF.hs
|
||||||
strip gf3
|
strip gf3
|
||||||
mv gf3 ../bin/
|
mv gf3 ../bin/
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user