summaryrefslogtreecommitdiff
path: root/src/GF
diff options
context:
space:
mode:
authoraarne <unknown>2005-10-05 19:02:19 +0000
committeraarne <unknown>2005-10-05 19:02:19 +0000
commita78acc722ec26be2be20f22f74e98329d57008b1 (patch)
tree218294b2a57d3b6f8edce7730b9aa97d7537fadf /src/GF
parent1703bb826e314eb78c15f846af1e76784f7759e2 (diff)
grep etc
Diffstat (limited to 'src/GF')
-rw-r--r--src/GF/Compile/Compile.hs6
-rw-r--r--src/GF/Shell.hs13
-rw-r--r--src/GF/Shell/HelpFile.hs29
-rw-r--r--src/GF/Shell/PShell.hs5
-rw-r--r--src/GF/Shell/ShellCommands.hs6
-rw-r--r--src/GF/UseGrammar/Custom.hs8
-rw-r--r--src/GF/UseGrammar/Information.hs18
7 files changed, 64 insertions, 21 deletions
diff --git a/src/GF/Compile/Compile.hs b/src/GF/Compile/Compile.hs
index 08b2ff572..0b14cedc1 100644
--- a/src/GF/Compile/Compile.hs
+++ b/src/GF/Compile/Compile.hs
@@ -5,9 +5,9 @@
-- Stability : (stable)
-- Portability : (portable)
--
--- > CVS $Date: 2005/09/20 09:32:56 $
+-- > CVS $Date: 2005/10/05 20:02:19 $
-- > CVS $Author: aarne $
--- > CVS $Revision: 1.44 $
+-- > CVS $Revision: 1.45 $
--
-- The top-level compilation chain from source file to gfc\/gfr.
-----------------------------------------------------------------------------
@@ -106,7 +106,7 @@ compileModule opts1 st0 file = do
ps0 <- ioeIO $ pathListOpts opts fpath
let ps1 = if (useFileOpt && not useLineOpt)
- then (map (prefixPathName fpath) ps0)
+ then (ps0 ++ map (prefixPathName fpath) ps0)
else ps0
ps <- ioeIO $ extendPathEnv gfLibraryPath gfGrammarPathVar ps1
let ioeIOIf = if oElem beVerbose opts then ioeIO else (const (return ()))
diff --git a/src/GF/Shell.hs b/src/GF/Shell.hs
index 8ae01017c..6e3b241c0 100644
--- a/src/GF/Shell.hs
+++ b/src/GF/Shell.hs
@@ -5,9 +5,9 @@
-- Stability : (stable)
-- Portability : (portable)
--
--- > CVS $Date: 2005/07/01 08:16:32 $
+-- > CVS $Date: 2005/10/05 20:02:19 $
-- > CVS $Author: aarne $
--- > CVS $Revision: 1.42 $
+-- > CVS $Revision: 1.43 $
--
-- GF shell command interpreter.
-----------------------------------------------------------------------------
@@ -51,7 +51,7 @@ import GF.Grammar.PrGrammar
import Control.Monad (foldM,liftM)
import System (system)
import System.Random (newStdGen) ----
-import Data.List (nub)
+import Data.List (nub,isPrefixOf)
import GF.Data.Zipper ----
import GF.Data.Operations
@@ -269,6 +269,8 @@ execC co@(comm, opts0) sa@((st,(h,_)),a) = checkOptions st co >> case comm of
CSystemCommand s -> justOutput opts (system s >> return ()) sa
CPutString -> changeArg (opSS2CommandArg (optStringCommand opts gro)) sa
----- CShowTerm -> changeArg (opTS2CommandArg (optPrintTerm opts gro) . s2t) sa
+ CGrep ms -> changeArg (AString . unlines . filter (grep ms) . lines . prCommandArg) sa
+
CSetFlag -> changeState (addGlobalOptions opts0) sa
---- deprec! CSetLocalFlag lang -> changeState (addLocalOptions lang opts0) sa
@@ -327,6 +329,11 @@ execC co@(comm, opts0) sa@((st,(h,_)),a) = checkOptions st co >> case comm of
then (putStrLn ("Warning: discontinuous category" +++ prt_ c))
else (return ())
+ grep ms s = (if oElem beVerbose opts then not else id) $ grepv ms s --- -v
+ grepv ms s = case s of
+ _:cs -> isPrefixOf ms s || grepv ms cs
+ _ -> isPrefixOf ms s
+
-- commands either change the state or process the argument, but not both
-- some commands just do output
diff --git a/src/GF/Shell/HelpFile.hs b/src/GF/Shell/HelpFile.hs
index 9d32ce0db..187e18740 100644
--- a/src/GF/Shell/HelpFile.hs
+++ b/src/GF/Shell/HelpFile.hs
@@ -5,9 +5,9 @@
-- Stability : (stable)
-- Portability : (portable)
--
--- > CVS $Date: 2005/09/20 09:32:56 $
+-- > CVS $Date: 2005/10/05 20:02:19 $
-- > CVS $Author: aarne $
--- > CVS $Revision: 1.13 $
+-- > CVS $Revision: 1.14 $
--
-- Help on shell commands. Generated from HelpFile by 'make help'.
-- PLEASE DON'T EDIT THIS FILE.
@@ -115,7 +115,6 @@ txtHelpFile =
"\n options:" ++
"\n -utf8 apply UTF8 encoding to the tokens in the grammar" ++
"\n -utf8id apply UTF8 encoding to the identifiers in the grammar" ++
- "\n -graph print module dependency graph in 'dot' format" ++
"\n examples:" ++
"\n pm | wf Letter.gfcm -- print the grammar into the file Letter.gfcm" ++
"\n pm -printer=graph | wf D.dot -- then do 'dot -Tps D.dot > D.ps'" ++
@@ -203,6 +202,14 @@ txtHelpFile =
"\n examples:" ++
"\n tt -lexer=codelit \"2*(x + 3)\" -- a favourite lexer for program code" ++
"\n" ++
+ "\ng, grep: g String1 String2" ++
+ "\n Grep the String1 in the String2. String2 is read line by line," ++
+ "\n and only those lines that contain String1 are returned." ++
+ "\n flags:" ++
+ "\n -v return those lines that do not contain String1." ++
+ "\n examples:" ++
+ "\n pg -printer=cf | grep \"mother\" -- show cf rules with word mother" ++
+ "\n" ++
"\ncc, compute_concrete: cc Term" ++
"\n Compute a term by concrete syntax definitions. Uses the topmost" ++
"\n resource module (the last in listing by command po) to resolve " ++
@@ -505,13 +512,16 @@ txtHelpFile =
"\n -optimize=all first try parametrize then do values with the rest" ++
"\n -optimize=none no optimization" ++
"\n" ++
- "\n-parser, parsing strategy. The default is chart. If -cfg or -mcfg are selected, only bottomup and topdown are recognized." ++
+ "\n-parser, parsing strategy. The default is chart. If -cfg or -mcfg are" ++
+ "\n selected, only bottomup and topdown are recognized." ++
"\n -parser=chart bottom-up chart parsing" ++
"\n -parser=bottomup a more up to date bottom-up strategy" ++
"\n -parser=topdown top-down strategy" ++
"\n -parser=old an old bottom-up chart parser" ++
"\n" ++
- "\n-printer, format in which the grammar is printed. The default is gfc." ++
+ "\n-printer, format in which the grammar is printed. The default is" ++
+ "\n gfc. Those marked with M are (only) available for pm, the rest" ++
+ "\n for pg." ++
"\n -printer=gfc GFC grammar" ++
"\n -printer=gf GF grammar" ++
"\n -printer=old old GF grammar" ++
@@ -535,6 +545,15 @@ txtHelpFile =
"\n -printer=fa_graphviz a finite automaton with labelled edges" ++
"\n -printer=regular a regular grammar in a simple BNF" ++
"\n -printer=unpar a gfc grammar with parameters eliminated" ++
+ "\n -printer=functiongraph abstract syntax functions in 'dot' format" ++
+ "\n -printer=typegraph abstract syntax categories in 'dot' format" ++
+ "\n -printer=gfcm M gfcm file (default for pm)" ++
+ "\n -printer=header M gfcm file with header (for GF embedded in Java)" ++
+ "\n -printer=graph M module dependency graph in 'dot' (graphviz) format" ++
+ "\n -printer=missing M the missing linearizations of each concrete" ++
+ "\n -printer=gfc-prolog M gfc in prolog format (also pg)" ++
+ "\n -printer=mcfg-prolog M mcfg in prolog format (also pg)" ++
+ "\n -printer=cfg-prolog M cfg in prolog format (also pg)" ++
"\n" ++
"\n-startcat, like -cat, but used in grammars (to avoid clash with keyword cat)" ++
"\n" ++
diff --git a/src/GF/Shell/PShell.hs b/src/GF/Shell/PShell.hs
index b555317aa..d01366728 100644
--- a/src/GF/Shell/PShell.hs
+++ b/src/GF/Shell/PShell.hs
@@ -5,9 +5,9 @@
-- Stability : (stable)
-- Portability : (portable)
--
--- > CVS $Date: 2005/06/20 16:14:20 $
+-- > CVS $Date: 2005/10/05 20:02:20 $
-- > CVS $Author: aarne $
--- > CVS $Revision: 1.25 $
+-- > CVS $Revision: 1.26 $
--
-- parsing GF shell commands. AR 11\/11\/2001
-----------------------------------------------------------------------------
@@ -133,6 +133,7 @@ pCommand ws = case ws of
"st" : s -> aTerm CShowTerm s
"!" : s -> aUnit (CSystemCommand (unwords s))
"sc" : s -> aUnit (CSystemCommand (unwords s))
+ "g" : f : s -> aString (CGrep (unquote f)) s
"sf" : l : [] -> aUnit (CSetLocalFlag (language l))
"sf" : [] -> aUnit CSetFlag
diff --git a/src/GF/Shell/ShellCommands.hs b/src/GF/Shell/ShellCommands.hs
index 9d6718faf..c2d2b367b 100644
--- a/src/GF/Shell/ShellCommands.hs
+++ b/src/GF/Shell/ShellCommands.hs
@@ -5,9 +5,9 @@
-- Stability : (stable)
-- Portability : (portable)
--
--- > CVS $Date: 2005/07/01 08:16:32 $
+-- > CVS $Date: 2005/10/05 20:02:20 $
-- > CVS $Author: aarne $
--- > CVS $Revision: 1.39 $
+-- > CVS $Revision: 1.40 $
--
-- The datatype of shell commands and the list of their options.
-----------------------------------------------------------------------------
@@ -64,6 +64,7 @@ data Command =
| CPutString
| CShowTerm
| CSystemCommand String
+ | CGrep String
| CSetFlag
| CSetLocalFlag Language
@@ -193,6 +194,7 @@ optionsOfCommand co = case co of
CShowTerm -> flags "printer"
CShowTreeGraph -> opts "c f g o"
CSystemCommand _ -> none
+ CGrep _ -> opts "v"
CPrintGrammar -> both "utf8" "printer lang"
CPrintMultiGrammar -> both "utf8 utf8id" "printer"
diff --git a/src/GF/UseGrammar/Custom.hs b/src/GF/UseGrammar/Custom.hs
index f5ed30009..8db581d18 100644
--- a/src/GF/UseGrammar/Custom.hs
+++ b/src/GF/UseGrammar/Custom.hs
@@ -5,9 +5,9 @@
-- Stability : (stable)
-- Portability : (portable)
--
--- > CVS $Date: 2005/10/05 11:56:42 $
--- > CVS $Author: peb $
--- > CVS $Revision: 1.76 $
+-- > CVS $Date: 2005/10/05 20:02:20 $
+-- > CVS $Author: aarne $
+-- > CVS $Revision: 1.77 $
--
-- A database for customizable GF shell commands.
--
@@ -63,6 +63,7 @@ import GF.Data.Zipper
import GF.UseGrammar.Statistics
import GF.UseGrammar.Morphology
+import GF.UseGrammar.Information
import GF.API.GrammarToHaskell
-----import GrammarToCanon (showCanon, showCanonOpt)
-----import qualified GrammarToGFC as GFC
@@ -307,6 +308,7 @@ customMultiGrammarPrinter =
,(strCI "header", const (MC.prCanonMGr . unoptimizeCanon))
,(strCI "cfgm", prCanonAsCFGM)
,(strCI "graph", visualizeCanonGrammar)
+ ,(strCI "missing", const missingLinCanonGrammar)
-- to prolog format:
,(strCI "gfc-prolog", CnvProlog.prtSMulti)
diff --git a/src/GF/UseGrammar/Information.hs b/src/GF/UseGrammar/Information.hs
index 446173aa2..094eb698c 100644
--- a/src/GF/UseGrammar/Information.hs
+++ b/src/GF/UseGrammar/Information.hs
@@ -5,16 +5,19 @@
-- Stability : (stable)
-- Portability : (portable)
--
--- > CVS $Date: 2005/05/30 18:39:45 $
+-- > CVS $Date: 2005/10/05 20:02:20 $
-- > CVS $Author: aarne $
--- > CVS $Revision: 1.6 $
+-- > CVS $Revision: 1.7 $
--
-- information on module, category, function, operation, parameter,...
-- AR 16\/9\/2003.
-- uses source grammar
-----------------------------------------------------------------------------
-module GF.UseGrammar.Information (showInformation) where
+module GF.UseGrammar.Information (
+ showInformation,
+ missingLinCanonGrammar
+ ) where
import GF.Grammar.Grammar
import GF.Infra.Ident
@@ -25,6 +28,7 @@ import GF.CF.PPrCF
import GF.Compile.ShellState
import GF.Grammar.PrGrammar
import GF.Grammar.Lookup
+import GF.Grammar.Macros (zIdent)
import qualified GF.Canon.GFC as GFC
import qualified GF.Canon.AbsGFC as AbsGFC
@@ -141,3 +145,11 @@ ownConstants = map fst . filter isOwn . tree2list where
AnyInd _ _ -> False
_ -> True
+missingLinCanonGrammar :: GFC.CanonGrammar -> String
+missingLinCanonGrammar cgr =
+ unlines $ concat [prt_ c : missing js | (c,js) <- concretes] where
+ missing js = map ((" " ++) . prt_) $ filter (not . flip isInBinTree js) abstract
+ abstract = err (const []) (map fst . tree2list . jments) $ lookupModMod cgr absId
+ absId = maybe (zIdent "") id $ greatestAbstract cgr
+ concretes = [(cnc,jments mo) |
+ cnc <- allConcretes cgr absId, Ok mo <- [lookupModMod cgr cnc]]