From 9c4564c8a4e8fa180c125fa09410acd9e6b5ca20 Mon Sep 17 00:00:00 2001 From: hallgren Date: Mon, 17 Oct 2011 13:51:25 +0000 Subject: [PATCH] example-based: use random generation for the examples --- src/example-based/ExampleDemo.hs | 11 +++++------ src/example-based/ExampleService.hs | 4 +++- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/example-based/ExampleDemo.hs b/src/example-based/ExampleDemo.hs index 0c187219a..2f344f0a3 100644 --- a/src/example-based/ExampleDemo.hs +++ b/src/example-based/ExampleDemo.hs @@ -10,7 +10,7 @@ import qualified Data.IntMap as IntMap import qualified Data.Set as Set import Data.Maybe import System.Environment (getArgs) -import System.Random (newStdGen) +import System.Random (RandomGen) --newStdGen type MyType = CId -- name of the categories from the program @@ -39,8 +39,7 @@ data Environ = Env {getTypeMap :: TypeMap, -- mapping between a getConcMap :: ConcMap, -- concrete expression after parsing getSigs :: Map.Map MyType [FuncWithArg], -- functions for which we have the concrete syntax already with args getAll :: [FuncWithArg] -- all the functions with arguments -} - + } getNext :: Environ -> ([MyFunc],[MyFunc]) @@ -60,12 +59,12 @@ getNext env = in (exampleable,testeable) -provideExample :: Environ -> MyFunc -> PGF -> PGF -> Language -> Maybe (Expr,String) -provideExample env myfunc parsePGF pgfFile lang = +provideExample :: RandomGen gen => gen -> Environ -> MyFunc -> PGF -> PGF -> Language -> Maybe (Expr,String) +provideExample gen env myfunc parsePGF pgfFile lang = fmap giveExample $ getNameExpr myfunc env where giveExample e_ = - let newexpr = head $ generateFromDepth pgfFile e_ (Just 5) -- change here with the new random generator + let newexpr = head $ generateRandomFromDepth gen pgfFile e_ (Just 5) -- change here with the new random generator ty = getType $ head $ filter (\x -> getName x == myfunc) $ getAll env embeddedExpr = maybe "" (\x -> ", as in: " ++ q (linearize pgfFile lang x)) (embedInStart (getAll env) (Map.fromList [(ty,e_)])) lexpr = linearize pgfFile lang newexpr diff --git a/src/example-based/ExampleService.hs b/src/example-based/ExampleService.hs index e4198a87b..ecead5425 100644 --- a/src/example-based/ExampleService.hs +++ b/src/example-based/ExampleService.hs @@ -1,4 +1,5 @@ module ExampleService(cgiMain,cgiMain',newPGFCache) where +import System.Random(newStdGen) import System.FilePath((),makeRelative) import Data.Map(fromList) import Data.Char(isDigit) @@ -33,7 +34,8 @@ doProvideExample root cwd cache environ = parsePGF <- readParsePGF cwd cache let adjpath path = rootmakeRelative "/" (makeRelative root cwdpath) pgf <- liftIO . readCache cache . adjpath =<< getInp "grammar" - let Just (e,s) = E.provideExample environ fun parsePGF pgf lang + gen <- liftIO newStdGen + let Just (e,s) = E.provideExample gen environ fun parsePGF pgf lang res = (showExpr [] e,s) liftIO $ logError $ "proveExample ... = "++show res outputJSONP res