summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/gf-history.html11
-rw-r--r--examples/gfcc/ImperEng.gf1
-rw-r--r--examples/stoneage/StoneageEng.gf3
-rw-r--r--examples/stoneage/StoneageSwe.gf3
-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
-rw-r--r--src/HelpFile25
12 files changed, 102 insertions, 26 deletions
diff --git a/doc/gf-history.html b/doc/gf-history.html
index d50f42075..f2b02d731 100644
--- a/doc/gf-history.html
+++ b/doc/gf-history.html
@@ -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
diff --git a/examples/gfcc/ImperEng.gf b/examples/gfcc/ImperEng.gf
index 45049b4bc..6a2a10e7c 100644
--- a/examples/gfcc/ImperEng.gf
+++ b/examples/gfcc/ImperEng.gf
@@ -1,3 +1,4 @@
+-- # -path=.:prelude
--# -path=.:../../lib/prelude
-- Toy English phrasing of C programs. Intended use is with
diff --git a/examples/stoneage/StoneageEng.gf b/examples/stoneage/StoneageEng.gf
index a3942d58e..8adcfe8bc 100644
--- a/examples/stoneage/StoneageEng.gf
+++ b/examples/stoneage/StoneageEng.gf
@@ -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 {
diff --git a/examples/stoneage/StoneageSwe.gf b/examples/stoneage/StoneageSwe.gf
index 190de7c56..3109db12b 100644
--- a/examples/stoneage/StoneageSwe.gf
+++ b/examples/stoneage/StoneageSwe.gf
@@ -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))) ;
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]]
diff --git a/src/HelpFile b/src/HelpFile
index 25ba3659d..fb7d3cefd 100644
--- a/src/HelpFile
+++ b/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)