mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-09 04:59:31 -06:00
140 lines
4.5 KiB
Haskell
140 lines
4.5 KiB
Haskell
module PShell where
|
|
|
|
import Operations
|
|
import UseIO
|
|
import ShellState
|
|
import ShellCommands
|
|
import Shell
|
|
import Option
|
|
import PGrammar (pzIdent, pTrm) --- (string2formsAndTerm)
|
|
import API
|
|
import Arch(fetchCommand)
|
|
|
|
import Char (isDigit)
|
|
import IO
|
|
|
|
-- parsing GF shell commands. AR 11/11/2001
|
|
|
|
-- getting a sequence of command lines as input
|
|
|
|
getCommandLines :: IO (String,[CommandLine])
|
|
getCommandLines = do
|
|
s <- fetchCommand "> "
|
|
return (s,pCommandLines s)
|
|
|
|
getCommandLinesBatch :: IO (String,[CommandLine])
|
|
getCommandLinesBatch = do
|
|
s <- catch getLine (\e -> if IO.isEOFError e then return "q" else ioError e)
|
|
return $ (s,pCommandLines s)
|
|
|
|
pCommandLines :: String -> [CommandLine]
|
|
pCommandLines = map pCommandLine . concatMap (chunks ";;" . words) . lines
|
|
|
|
pCommandLine :: [String] -> CommandLine
|
|
pCommandLine s = pFirst (chks s) where
|
|
pFirst cos = case cos of
|
|
(c,os,[a]) : cs -> ((c,os), a, pCont cs)
|
|
_ -> ((CVoid,noOptions), AError "no parse", [])
|
|
pCont cos = case cos of
|
|
(c,os,_) : cs -> (c,os) : pCont cs
|
|
_ -> []
|
|
chks = map pCommandOpt . chunks "|"
|
|
|
|
pCommandOpt :: [String] -> (Command, Options, [CommandArg])
|
|
pCommandOpt (w:ws) = let
|
|
(os, co) = getOptions "-" ws
|
|
(comm, args) = pCommand (abbrevCommand w:co)
|
|
in
|
|
(comm, os, args)
|
|
pCommandOpt s = (CVoid, noOptions, [AError "no parse"])
|
|
|
|
pInputString :: String -> [CommandArg]
|
|
pInputString s = case s of
|
|
('"':_:_) -> [AString (init (tail s))]
|
|
_ -> [AError "illegal string"]
|
|
|
|
-- command rl can be written remove_language etc.
|
|
|
|
abbrevCommand :: String -> String
|
|
abbrevCommand = hds . words . map u2sp where
|
|
u2sp c = if c=='_' then ' ' else c
|
|
hds s = case s of
|
|
[w@[_,_]] -> w
|
|
_ -> map head s
|
|
|
|
pCommand :: [String] -> (Command, [CommandArg])
|
|
pCommand ws = case ws of
|
|
|
|
"i" : f : [] -> aUnit (CImport f)
|
|
"rl" : l : [] -> aUnit (CRemoveLanguage (language l))
|
|
"e" : [] -> aUnit CEmptyState
|
|
"s" : [] -> aUnit CStripState
|
|
"tg" : f : [] -> aUnit (CTransformGrammar f)
|
|
"cl" : f : [] -> aUnit (CConvertLatex f)
|
|
|
|
"ph" : [] -> aUnit CPrintHistory
|
|
|
|
"l" : s -> aTermLi CLinearize s
|
|
|
|
"p" : s -> aString CParse s
|
|
"t" : i:o: s -> aString (CTranslate (language i) (language o)) s
|
|
"gr" : [] -> aUnit CGenerateRandom
|
|
"gr" : t -> aTerm CGenerateRandom t
|
|
"gt" : [] -> aUnit CGenerateTrees
|
|
"gt" : t -> aTerm CGenerateTrees t
|
|
"pt" : s -> aTerm CPutTerm s
|
|
----- "wt" : f : s -> aTerm (CWrapTerm (string2id f)) s
|
|
"ma" : s -> aString CMorphoAnalyse s
|
|
"tt" : s -> aString CTestTokenizer s
|
|
"cc" : s -> aUnit $ CComputeConcrete $ unwords s
|
|
"so" : s -> aUnit $ CShowOpers $ unwords s
|
|
|
|
"tq" : i:o:[] -> aUnit (CTranslationQuiz (language i) (language o))
|
|
"tl":i:o:n:[] -> aUnit (CTranslationList (language i) (language o) (readIntArg n))
|
|
"mq" : [] -> aUnit CMorphoQuiz
|
|
"ml" : n : [] -> aUnit (CMorphoList (readIntArg n))
|
|
|
|
"wf" : f : s -> aString (CWriteFile f) s
|
|
"af" : f : s -> aString (CAppendFile f) s
|
|
"rf" : f : [] -> aUnit (CReadFile f)
|
|
"sa" : s -> aString CSpeakAloud s
|
|
"ps" : s -> aString CPutString s
|
|
"st" : s -> aTerm CShowTerm s
|
|
"!" : s -> aUnit (CSystemCommand (unwords s))
|
|
"sc" : s -> aUnit (CSystemCommand (unwords s))
|
|
|
|
"sf" : l : [] -> aUnit (CSetLocalFlag (language l))
|
|
"sf" : [] -> aUnit CSetFlag
|
|
|
|
"pg" : [] -> aUnit CPrintGrammar
|
|
"pi" : c : [] -> aUnit $ CPrintInformation (pzIdent c)
|
|
|
|
"pj" : [] -> aUnit CPrintGramlet
|
|
"pxs" : [] -> aUnit CPrintCanonXMLStruct
|
|
"px" : [] -> aUnit CPrintCanonXML
|
|
"pm" : [] -> aUnit CPrintMultiGrammar
|
|
"sg" : [] -> aUnit CPrintSourceGrammar
|
|
"po" : [] -> aUnit CPrintGlobalOptions
|
|
"pl" : [] -> aUnit CPrintLanguages
|
|
"h" : c : [] -> aUnit $ CHelp (Just (abbrevCommand c))
|
|
"h" : [] -> aUnit $ CHelp Nothing
|
|
|
|
"q" : [] -> aImpure ICQuit
|
|
"eh" : f : [] -> aImpure (ICExecuteHistory f)
|
|
n : [] | all isDigit n -> aImpure (ICEarlierCommand (readIntArg n))
|
|
|
|
"es" : [] -> aImpure ICEditSession
|
|
"ts" : [] -> aImpure ICTranslateSession
|
|
|
|
_ -> (CVoid, [])
|
|
|
|
where
|
|
aString c ss = (c, pInputString (unwords ss))
|
|
aTerm c ss = (c, [ASTrm $ unwords ss]) ---- [ASTrms [s2t (unwords ss)]])
|
|
aUnit c = (c, [AUnit])
|
|
aImpure = aUnit . CImpure
|
|
|
|
aTermLi c ss = (c [], [ASTrm $ unwords ss])
|
|
---- (c forms, [ASTrms [term]]) where
|
|
---- (forms,term) = ([], s2t (unwords ss)) ---- string2formsAndTerm (unwords ss)
|