summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authoraarne <aarne@cs.chalmers.se>2008-01-08 12:22:05 +0000
committeraarne <aarne@cs.chalmers.se>2008-01-08 12:22:05 +0000
commit327c63eb741606adf5d7d98cd32b731f6bda7ae7 (patch)
tree898c6c4ada7e1d3283bd13333a1d7367748cbaa5 /src
parent12144083879e174d8d8176f2c37ea0aaf1a3d948 (diff)
gt command in gf3
Diffstat (limited to 'src')
-rw-r--r--src/GF/Command/Commands.hs10
-rw-r--r--src/GF/GFCC/API.hs8
-rw-r--r--src/GF/GFCC/Generate.hs6
3 files changed, 18 insertions, 6 deletions
diff --git a/src/GF/Command/Commands.hs b/src/GF/Command/Commands.hs
index f89a3d111..573b15eb1 100644
--- a/src/GF/Command/Commands.hs
+++ b/src/GF/Command/Commands.hs
@@ -91,6 +91,15 @@ allCommands mgr = Map.fromAscList [
ts <- generateRandom mgr (optCat opts)
return $ fromTrees $ take (optNum opts) ts
}),
+ ("gt", emptyCommandInfo {
+ longname = "generate_trees",
+ synopsis = "generates a list of trees, by default exhaustive",
+ flags = ["cat","depth","number"],
+ exec = \opts _ -> do
+ let dp = return $ valIntOpts "depth" 4 opts
+ let ts = generateAllDepth mgr (optCat opts) dp
+ return $ fromTrees $ take (optNumInf opts) ts
+ }),
("h", emptyCommandInfo {
longname = "help",
synopsis = "get description of a command, or a the full list of commands",
@@ -134,6 +143,7 @@ allCommands mgr = Map.fromAscList [
lang -> [lang]
optCat opts = valIdOpts "cat" (lookAbsFlag gr (cid "startcat")) opts
optNum opts = valIntOpts "number" 1 opts
+ optNumInf opts = valIntOpts "number" 1000000000 opts ---- 10^9
gr = gfcc mgr
diff --git a/src/GF/GFCC/API.hs b/src/GF/GFCC/API.hs
index 0a3b37cc5..f02942a20 100644
--- a/src/GF/GFCC/API.hs
+++ b/src/GF/GFCC/API.hs
@@ -59,8 +59,9 @@ linearizeAllLang :: MultiGrammar -> Tree -> [(Language,String)]
parseAll :: MultiGrammar -> Category -> String -> [[Tree]]
parseAllLang :: MultiGrammar -> Category -> String -> [(Language,[Tree])]
-generateAll :: MultiGrammar -> Category -> [Tree]
-generateRandom :: MultiGrammar -> Category -> IO [Tree]
+generateAll :: MultiGrammar -> Category -> [Tree]
+generateRandom :: MultiGrammar -> Category -> IO [Tree]
+generateAllDepth :: MultiGrammar -> Category -> Maybe Int -> [Tree]
readTree :: MultiGrammar -> String -> Tree
showTree :: Tree -> String
@@ -105,7 +106,8 @@ generateRandom mgr cat = do
gen <- newStdGen
return $ genRandom gen (gfcc mgr) (CId cat)
-generateAll mgr cat = generate (gfcc mgr) (CId cat)
+generateAll mgr cat = generate (gfcc mgr) (CId cat) Nothing
+generateAllDepth mgr cat = generate (gfcc mgr) (CId cat)
readTree _ = pTree
diff --git a/src/GF/GFCC/Generate.hs b/src/GF/GFCC/Generate.hs
index 1924a8849..63bdb3b9a 100644
--- a/src/GF/GFCC/Generate.hs
+++ b/src/GF/GFCC/Generate.hs
@@ -8,8 +8,8 @@ import qualified Data.Map as M
import System.Random
-- generate an infinite list of trees exhaustively
-generate :: GFCC -> CId -> [Exp]
-generate gfcc cat = concatMap (\i -> gener i cat) [0..]
+generate :: GFCC -> CId -> Maybe Int -> [Exp]
+generate gfcc cat dp = concatMap (\i -> gener i cat) depths
where
gener 0 c = [tree (AC f) [] | (f, ([],_)) <- fns c]
gener i c = [
@@ -21,7 +21,7 @@ generate gfcc cat = concatMap (\i -> gener i cat) [0..]
depth tr >= i
]
fns c = [(f,catSkeleton ty) | (f,ty) <- functionsToCat gfcc c]
-
+ depths = maybe [0 ..] (\d -> [0..d]) dp
-- generate an infinite list of trees randomly
genRandom :: StdGen -> GFCC -> CId -> [Exp]