forked from GitHub/gf-core
grep etc
This commit is contained in:
@@ -14,6 +14,17 @@ Changes in functionality since May 17, 2005, release of GF Version 2.2
|
||||
|
||||
<p>
|
||||
|
||||
5/10 (AR) Printing missing linearization rules:
|
||||
<tt>pm -printer=missing</tt>. Command <tt>g = grep</tt>,
|
||||
which works in a way similar to Unix grep.
|
||||
|
||||
<p>
|
||||
|
||||
5/10 (PL) Printing graphs with function and category dependencies:
|
||||
<tt>pg -printer=functiongraph</tt>, <tt>pg -printer=typegraph</tt>.
|
||||
|
||||
<p>
|
||||
|
||||
20/9 (AR) Added optimization by <b>common subexpression elimination</b>.
|
||||
It works on GFC modules and creates <tt>oper</tt> definitions for
|
||||
subterms that occur more than once in <tt>lin</tt> definitions. These
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
-- # -path=.:prelude
|
||||
--# -path=.:../../lib/prelude
|
||||
|
||||
-- Toy English phrasing of C programs. Intended use is with
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
--# -path=.:../../lib/resource/abstract:../../lib/resource/english:../../lib/prelude
|
||||
--# -path=.:resource/english:resource/abstract:prelude
|
||||
-- # -path=.:../../lib/resource/abstract:../../lib/resource/english:../../lib/prelude
|
||||
concrete StoneageEng of Stoneage
|
||||
= open SyntaxEng, ResourceEng, ParadigmsEng, SwadeshLexEng,
|
||||
StoneageResEng in {
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
-- # -path=.:resource/abstract:prelude:resource/swedish:resource/scandinavian
|
||||
--# -path=.:../../lib/resource/abstract:../../lib/prelude:../../lib/resource/swedish:../../lib/resource/scandinavian
|
||||
concrete StoneageSwe of Stoneage
|
||||
= open SyntaxSwe, ResourceSwe, ParadigmsSwe, VerbsSwe, SwadeshLexSwe, StoneageResSwe in {
|
||||
@@ -30,7 +31,7 @@ lin
|
||||
Know = PresVasV2 know_V ;
|
||||
Smell s o = PresCl (SPredV2 s (dirV2 känna_V) (DefOneNP
|
||||
(AdvCN (UseN (mk2N "lukt" "lukter"))
|
||||
(PrepNP possess_Prep o)))) ;
|
||||
(AdvPP (PrepNP possess_Prep o))))) ;
|
||||
Fear = PresVasV2 fear_V ;
|
||||
Kill = PresVasV2 kill_V ;
|
||||
Fight s o = PresCl (AdvCl (SPredV s fight_V) (AdvPP (PrepNP with_Prep o))) ;
|
||||
|
||||
@@ -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 ()))
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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" ++
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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]]
|
||||
|
||||
25
src/HelpFile
25
src/HelpFile
@@ -86,7 +86,6 @@ pm, print_multigrammar: pm
|
||||
options:
|
||||
-utf8 apply UTF8 encoding to the tokens in the grammar
|
||||
-utf8id apply UTF8 encoding to the identifiers in the grammar
|
||||
-graph print module dependency graph in 'dot' format
|
||||
examples:
|
||||
pm | wf Letter.gfcm -- print the grammar into the file Letter.gfcm
|
||||
pm -printer=graph | wf D.dot -- then do 'dot -Tps D.dot > D.ps'
|
||||
@@ -174,6 +173,14 @@ tt, test_tokenizer: tt String
|
||||
examples:
|
||||
tt -lexer=codelit "2*(x + 3)" -- a favourite lexer for program code
|
||||
|
||||
g, grep: g String1 String2
|
||||
Grep the String1 in the String2. String2 is read line by line,
|
||||
and only those lines that contain String1 are returned.
|
||||
flags:
|
||||
-v return those lines that do not contain String1.
|
||||
examples:
|
||||
pg -printer=cf | grep "mother" -- show cf rules with word mother
|
||||
|
||||
cc, compute_concrete: cc Term
|
||||
Compute a term by concrete syntax definitions. Uses the topmost
|
||||
resource module (the last in listing by command po) to resolve
|
||||
@@ -476,13 +483,16 @@ q, quit: q
|
||||
-optimize=all first try parametrize then do values with the rest
|
||||
-optimize=none no optimization
|
||||
|
||||
-parser, parsing strategy. The default is chart. If -cfg or -mcfg are selected, only bottomup and topdown are recognized.
|
||||
-parser, parsing strategy. The default is chart. If -cfg or -mcfg are
|
||||
selected, only bottomup and topdown are recognized.
|
||||
-parser=chart bottom-up chart parsing
|
||||
-parser=bottomup a more up to date bottom-up strategy
|
||||
-parser=topdown top-down strategy
|
||||
-parser=old an old bottom-up chart parser
|
||||
|
||||
-printer, format in which the grammar is printed. The default is gfc.
|
||||
-printer, format in which the grammar is printed. The default is
|
||||
gfc. Those marked with M are (only) available for pm, the rest
|
||||
for pg.
|
||||
-printer=gfc GFC grammar
|
||||
-printer=gf GF grammar
|
||||
-printer=old old GF grammar
|
||||
@@ -506,6 +516,15 @@ q, quit: q
|
||||
-printer=fa_graphviz a finite automaton with labelled edges
|
||||
-printer=regular a regular grammar in a simple BNF
|
||||
-printer=unpar a gfc grammar with parameters eliminated
|
||||
-printer=functiongraph abstract syntax functions in 'dot' format
|
||||
-printer=typegraph abstract syntax categories in 'dot' format
|
||||
-printer=gfcm M gfcm file (default for pm)
|
||||
-printer=header M gfcm file with header (for GF embedded in Java)
|
||||
-printer=graph M module dependency graph in 'dot' (graphviz) format
|
||||
-printer=missing M the missing linearizations of each concrete
|
||||
-printer=gfc-prolog M gfc in prolog format (also pg)
|
||||
-printer=mcfg-prolog M mcfg in prolog format (also pg)
|
||||
-printer=cfg-prolog M cfg in prolog format (also pg)
|
||||
|
||||
-startcat, like -cat, but used in grammars (to avoid clash with keyword cat)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user