From 2c10d62b1f9c9b1987f9f9921d7b394ae32c584e Mon Sep 17 00:00:00 2001 From: aarne Date: Mon, 12 Nov 2007 09:17:02 +0000 Subject: [PATCH] merged gfc and gfi to one binary, and a shell script for gfc --- bin/gfc | 3 + src/GF/Devel/GF.hs | 14 ++++ src/GF/Devel/GF3.hs | 79 --------------------- src/GF/Devel/GFC.hs | 9 ++- src/GF/Devel/GFCCInterpreter.hs | 28 ++++++++ src/GF/Devel/GFI.hs | 120 +++++++++++++++++--------------- src/Makefile | 12 +--- 7 files changed, 115 insertions(+), 150 deletions(-) create mode 100644 bin/gfc create mode 100644 src/GF/Devel/GF.hs delete mode 100644 src/GF/Devel/GF3.hs create mode 100644 src/GF/Devel/GFCCInterpreter.hs 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 -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 + } 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/