1
0
forked from GitHub/gf-core

random gen to fill given term

This commit is contained in:
aarne
2004-04-30 11:28:35 +00:00
parent 36a68bce6a
commit c9d10ab5ed
8 changed files with 23 additions and 14 deletions

View File

@@ -43,7 +43,7 @@ prCFTok t = case t of
TL s -> s TL s -> s
TI i -> show i TI i -> show i
TV x -> prt x TV x -> prt x
TM i _ -> "?" --- TM i m -> m --- "?" --- m
-- to build trees: the Atom contains a GF function, Cn | Meta | Vr | Literal -- to build trees: the Atom contains a GF function, Cn | Meta | Vr | Literal
newtype CFFun = CFFun (Atom, Profile) deriving (Eq,Show) newtype CFFun = CFFun (Atom, Profile) deriving (Eq,Show)
@@ -157,6 +157,8 @@ str2cftoks = map tS . words . sstr
compatToks :: [CFTok] -> [CFTok] -> Bool compatToks :: [CFTok] -> [CFTok] -> Bool
compatToks ts us = and [compatTok t u | (t,u) <- zip ts us] compatToks ts us = and [compatTok t u | (t,u) <- zip ts us]
compatTok (TM _ _) _ = True --- hack because metas are renamed
compatTok _ (TM _ _) = True
compatTok t u = any (`elem` (alts t)) (alts u) where compatTok t u = any (`elem` (alts t)) (alts u) where
alts u = case u of alts u = case u of
TC (c:s) -> [toLower c : s, toUpper c : s] TC (c:s) -> [toLower c : s, toUpper c : s]

View File

@@ -173,15 +173,17 @@ execC co@(comm, opts0) sa@((st,(h,_)),a) = case comm of
CTranslate il ol -> do CTranslate il ol -> do
let a' = opST2CommandArg (optParseArgErr opts (sgr il)) a let a' = opST2CommandArg (optParseArgErr opts (sgr il)) a
returnArg (opTS2CommandArg (optLinearizeTreeVal opts (sgr ol)) a') sa returnArg (opTS2CommandArg (optLinearizeTreeVal opts (sgr ol)) a') sa
CGenerateRandom n -> case a of CGenerateRandom n -> do
ASTrm _ -> do let
case s2t a of a' = case a of
ATrms [trm] -> do ASTrm _ -> s2t a
_ -> a
case a' of
ATrms (trm:_) -> do
g <- newStdGen g <- newStdGen
case (goFirstMeta (tree2loc trm) >>= refineRandom g 41 cgr) of case (goFirstMeta (tree2loc trm) >>= refineRandom g 41 cgr) of
Ok trm' -> returnArg (ATrms [loc2tree trm']) sa Ok trm' -> returnArg (ATrms [loc2tree trm']) sa
Bad s -> returnArg (AError s) sa Bad s -> returnArg (AError s) sa
_ -> returnArg a sa
_ -> do _ -> do
ts <- randomTreesIO opts gro (optIntOrN opts flagNumber n) ts <- randomTreesIO opts gro (optIntOrN opts flagNumber n)
returnArg (ATrms ts) sa returnArg (ATrms ts) sa

View File

@@ -71,7 +71,7 @@ pCommand ws = case ws of
"p" : s -> aString CParse s "p" : s -> aString CParse s
"t" : i:o: s -> aString (CTranslate (language i) (language o)) s "t" : i:o: s -> aString (CTranslate (language i) (language o)) s
"gr" : [] -> aUnit (CGenerateRandom 1) "gr" : [] -> aUnit (CGenerateRandom 1)
"gr" : t -> aTerm (CGenerateRandom 1) t "gt" : t -> aTerm (CGenerateRandom 1) t
--- "gr" : n : [] -> aUnit (CGenerateRandom (readIntArg n)) -- deprecated 12/5/2001 --- "gr" : n : [] -> aUnit (CGenerateRandom (readIntArg n)) -- deprecated 12/5/2001
"pt" : s -> aTerm CPutTerm s "pt" : s -> aTerm CPutTerm s
----- "wt" : f : s -> aTerm (CWrapTerm (string2id f)) s ----- "wt" : f : s -> aTerm (CWrapTerm (string2id f)) s

View File

@@ -5,6 +5,7 @@ import qualified AbsGFC as C
import GFC import GFC
import MkGFC (trExp) ---- import MkGFC (trExp) ----
import CMacros import CMacros
import MMacros (refreshMetas)
import Linear import Linear
import Str import Str
import CF import CF
@@ -68,7 +69,7 @@ tokens2trms opts sg cn parser as = do
_ -> do _ -> do
(ts1,ss) <- checkErr $ mapErr postParse ts0 (ts1,ss) <- checkErr $ mapErr postParse ts0
if null ts1 then raise ss else return () if null ts1 then raise ss else return ()
ts2 <- mapM (checkErr . (annotate gr) . trExp) ts1 ---- ts2 <- mapM (checkErr . annotate gr . refreshMetas [] . trExp) ts1 ----
if forgive then return ts2 else do if forgive then return ts2 else do
let tsss = [(t, allLinsOfTree gr cn t) | t <- ts2] let tsss = [(t, allLinsOfTree gr cn t) | t <- ts2]
ps = [t | (t,ss) <- tsss, ps = [t | (t,ss) <- tsss,

View File

@@ -29,7 +29,7 @@ mkCFTok s = case s of
mkCFTokVar :: String -> CFTok mkCFTokVar :: String -> CFTok
mkCFTokVar s = case s of mkCFTokVar s = case s of
'?':_:_ -> tM s '?':_:_ -> tM s --- "?" --- compat with prCF
'x':'_':_ -> tV s 'x':'_':_ -> tV s
'x':[] -> tV s 'x':[] -> tV s
'$':xs@(_:_) -> if last s == '$' then tV (init xs) else tS s '$':xs@(_:_) -> if last s == '$' then tV (init xs) else tS s

View File

@@ -152,8 +152,10 @@ t, translate: t Lang Lang String
-lexer -lexer
-parser -parser
gr, generate_random: gr gr, generate_random: gr Tree?
Generates a random Tree. Generates a random Tree of a given category. If a Tree
argument is given, the command completes the Tree with values to
the metavariables in the tree.
flags: flags:
-cat generate in this category -cat generate in this category
-lang use the abstract syntax of this grammar -lang use the abstract syntax of this grammar

View File

@@ -165,8 +165,10 @@ txtHelpFile =
"\n -lexer" ++ "\n -lexer" ++
"\n -parser" ++ "\n -parser" ++
"\n" ++ "\n" ++
"\ngr, generate_random: gr" ++ "\ngr, generate_random: gr Tree?" ++
"\n Generates a random Tree." ++ "\n Generates a random Tree of a given category. If a Tree" ++
"\n argument is given, the command completes the Tree with values to" ++
"\n the metavariables in the tree. " ++
"\n flags:" ++ "\n flags:" ++
"\n -cat generate in this category" ++ "\n -cat generate in this category" ++
"\n -lang use the abstract syntax of this grammar" ++ "\n -lang use the abstract syntax of this grammar" ++

View File

@@ -1 +1 @@
module Today where today = "Fre Apr 30 11:08:20 CEST 2004" module Today where today = "Fri Apr 30 14:27:30 CEST 2004"