From 327c63eb741606adf5d7d98cd32b731f6bda7ae7 Mon Sep 17 00:00:00 2001 From: aarne Date: Tue, 8 Jan 2008 12:22:05 +0000 Subject: [PATCH] gt command in gf3 --- examples/uusisuomi/correct-Aino.txt | 2 +- src/GF/Command/Commands.hs | 10 ++++++++++ src/GF/GFCC/API.hs | 8 +++++--- src/GF/GFCC/Generate.hs | 6 +++--- 4 files changed, 19 insertions(+), 7 deletions(-) diff --git a/examples/uusisuomi/correct-Aino.txt b/examples/uusisuomi/correct-Aino.txt index a7976475b..467c73845 100644 --- a/examples/uusisuomi/correct-Aino.txt +++ b/examples/uusisuomi/correct-Aino.txt @@ -172,7 +172,7 @@ harjoittelu harjoittelun harjoittelua harjoitteluna harjoitteluun harjoittelujen asia asian asiaa asiana asiaan asioiden asioita asioina asioissa asioihin -mieli mielin mieliä mielinä mieliin mielien mielejä mieleinä mieleissä mieleihin +mieli mielen mieltä mielenä mieleen mielien/mielten mieliä mielinä mielissä mieliin puuha puuhan puuhaa puuhana puuhaan puuhien puuhia puuhina puuhissa puuhiin 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]