diff options
| author | hallgren <hallgren@chalmers.se> | 2011-10-17 13:51:25 +0000 |
|---|---|---|
| committer | hallgren <hallgren@chalmers.se> | 2011-10-17 13:51:25 +0000 |
| commit | d4ee4a6133c2ce54460fc031576d7ef905c7261e (patch) | |
| tree | 7054f581dd67d4a24b71843005a080a9248ab7fc /src/example-based | |
| parent | c0becec2bd70d8dfb45554f9928c4cba7bc3109e (diff) | |
example-based: use random generation for the examples
Diffstat (limited to 'src/example-based')
| -rw-r--r-- | src/example-based/ExampleDemo.hs | 11 | ||||
| -rw-r--r-- | 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 = root</>makeRelative "/" (makeRelative root cwd</>path) 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 |
