gt command in gf3

This commit is contained in:
aarne
2008-01-08 12:22:05 +00:00
parent c6fa1c3a81
commit 2791eee7ff
4 changed files with 19 additions and 7 deletions

View File

@@ -172,7 +172,7 @@ harjoittelu harjoittelun harjoittelua harjoitteluna harjoitteluun harjoittelujen
asia asian asiaa asiana asiaan asioiden asioita asioina asioissa asioihin 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 puuha puuhan puuhaa puuhana puuhaan puuhien puuhia puuhina puuhissa puuhiin

View File

@@ -91,6 +91,15 @@ allCommands mgr = Map.fromAscList [
ts <- generateRandom mgr (optCat opts) ts <- generateRandom mgr (optCat opts)
return $ fromTrees $ take (optNum opts) ts 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 { ("h", emptyCommandInfo {
longname = "help", longname = "help",
synopsis = "get description of a command, or a the full list of commands", synopsis = "get description of a command, or a the full list of commands",
@@ -134,6 +143,7 @@ allCommands mgr = Map.fromAscList [
lang -> [lang] lang -> [lang]
optCat opts = valIdOpts "cat" (lookAbsFlag gr (cid "startcat")) opts optCat opts = valIdOpts "cat" (lookAbsFlag gr (cid "startcat")) opts
optNum opts = valIntOpts "number" 1 opts optNum opts = valIntOpts "number" 1 opts
optNumInf opts = valIntOpts "number" 1000000000 opts ---- 10^9
gr = gfcc mgr gr = gfcc mgr

View File

@@ -59,8 +59,9 @@ linearizeAllLang :: MultiGrammar -> Tree -> [(Language,String)]
parseAll :: MultiGrammar -> Category -> String -> [[Tree]] parseAll :: MultiGrammar -> Category -> String -> [[Tree]]
parseAllLang :: MultiGrammar -> Category -> String -> [(Language,[Tree])] parseAllLang :: MultiGrammar -> Category -> String -> [(Language,[Tree])]
generateAll :: MultiGrammar -> Category -> [Tree] generateAll :: MultiGrammar -> Category -> [Tree]
generateRandom :: MultiGrammar -> Category -> IO [Tree] generateRandom :: MultiGrammar -> Category -> IO [Tree]
generateAllDepth :: MultiGrammar -> Category -> Maybe Int -> [Tree]
readTree :: MultiGrammar -> String -> Tree readTree :: MultiGrammar -> String -> Tree
showTree :: Tree -> String showTree :: Tree -> String
@@ -105,7 +106,8 @@ generateRandom mgr cat = do
gen <- newStdGen gen <- newStdGen
return $ genRandom gen (gfcc mgr) (CId cat) 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 readTree _ = pTree

View File

@@ -8,8 +8,8 @@ import qualified Data.Map as M
import System.Random import System.Random
-- generate an infinite list of trees exhaustively -- generate an infinite list of trees exhaustively
generate :: GFCC -> CId -> [Exp] generate :: GFCC -> CId -> Maybe Int -> [Exp]
generate gfcc cat = concatMap (\i -> gener i cat) [0..] generate gfcc cat dp = concatMap (\i -> gener i cat) depths
where where
gener 0 c = [tree (AC f) [] | (f, ([],_)) <- fns c] gener 0 c = [tree (AC f) [] | (f, ([],_)) <- fns c]
gener i c = [ gener i c = [
@@ -21,7 +21,7 @@ generate gfcc cat = concatMap (\i -> gener i cat) [0..]
depth tr >= i depth tr >= i
] ]
fns c = [(f,catSkeleton ty) | (f,ty) <- functionsToCat gfcc c] fns c = [(f,catSkeleton ty) | (f,ty) <- functionsToCat gfcc c]
depths = maybe [0 ..] (\d -> [0..d]) dp
-- generate an infinite list of trees randomly -- generate an infinite list of trees randomly
genRandom :: StdGen -> GFCC -> CId -> [Exp] genRandom :: StdGen -> GFCC -> CId -> [Exp]