From db18350b1e55f7edfca8f02b0b233a6a7dcbb1ec Mon Sep 17 00:00:00 2001 From: aarne Date: Tue, 11 Nov 2008 09:21:59 +0000 Subject: fixed some tutorial grammars and updated embedded section (JavaScript and web TODO) --- examples/tutorial/embedded/Makefile | 4 ++++ examples/tutorial/embedded/Query.gf | 17 +++++++++++++++++ examples/tutorial/embedded/QueryEng.gf | 15 +++++++++++++++ examples/tutorial/embedded/TransferDef.hs | 26 ++++++++++++++++++++++++++ examples/tutorial/embedded/TransferLoop.hs | 21 +++++++++++++++++++++ 5 files changed, 83 insertions(+) create mode 100644 examples/tutorial/embedded/Makefile create mode 100644 examples/tutorial/embedded/Query.gf create mode 100644 examples/tutorial/embedded/QueryEng.gf create mode 100644 examples/tutorial/embedded/TransferDef.hs create mode 100644 examples/tutorial/embedded/TransferLoop.hs (limited to 'examples/tutorial/embedded') diff --git a/examples/tutorial/embedded/Makefile b/examples/tutorial/embedded/Makefile new file mode 100644 index 000000000..f1a61cb92 --- /dev/null +++ b/examples/tutorial/embedded/Makefile @@ -0,0 +1,4 @@ +all: + gfc --make --output-format=haskell QueryEng.gf + ghc --make -o ./math TransferLoop.hs + strip math diff --git a/examples/tutorial/embedded/Query.gf b/examples/tutorial/embedded/Query.gf new file mode 100644 index 000000000..b1ba23a87 --- /dev/null +++ b/examples/tutorial/embedded/Query.gf @@ -0,0 +1,17 @@ +abstract Query = { + + flags startcat=Question ; + + cat + Answer ; Question ; Object ; + + fun + Even : Object -> Question ; + Odd : Object -> Question ; + Prime : Object -> Question ; + Number : Int -> Object ; + + Yes : Answer ; + No : Answer ; +} + diff --git a/examples/tutorial/embedded/QueryEng.gf b/examples/tutorial/embedded/QueryEng.gf new file mode 100644 index 000000000..a740056ee --- /dev/null +++ b/examples/tutorial/embedded/QueryEng.gf @@ -0,0 +1,15 @@ +concrete QueryEng of Query = { + lincat + Answer, Question, Object = Str ; + + lin + Even x = "is" ++ x ++ "even" ; + Odd x = "is" ++ x ++ "odd" ; + Prime x = "is" ++ x ++ "prime" ; + Number n = n.s ; + + Yes = "yes" ; + No = "no" ; + +} + diff --git a/examples/tutorial/embedded/TransferDef.hs b/examples/tutorial/embedded/TransferDef.hs new file mode 100644 index 000000000..37d81c6dc --- /dev/null +++ b/examples/tutorial/embedded/TransferDef.hs @@ -0,0 +1,26 @@ +module TransferDef where + +import PGF (Tree) +import Query -- generated from GF + +transfer :: Tree -> Tree +transfer = gf . answer . fg + +answer :: GQuestion -> GAnswer +answer p = case p of + GOdd x -> test odd x + GEven x -> test even x + GPrime x -> test prime x + +value :: GObject -> Int +value e = case e of + GNumber (GInt i) -> fromInteger i + +test :: (Int -> Bool) -> GObject -> GAnswer +test f x = if f (value x) then GYes else GNo + +prime :: Int -> Bool +prime x = elem x primes where + primes = sieve [2 .. x] + sieve (p:xs) = p : sieve [ n | n <- xs, n `mod` p > 0 ] + sieve [] = [] diff --git a/examples/tutorial/embedded/TransferLoop.hs b/examples/tutorial/embedded/TransferLoop.hs new file mode 100644 index 000000000..58498da11 --- /dev/null +++ b/examples/tutorial/embedded/TransferLoop.hs @@ -0,0 +1,21 @@ +module Main where + +import PGF +import TransferDef (transfer) + +main :: IO () +main = do + gr <- readPGF "Query.pgf" + loop (translate transfer gr) + +loop :: (String -> String) -> IO () +loop trans = do + s <- getLine + if s == "quit" then putStrLn "bye" else do + putStrLn $ trans s + loop trans + +translate :: (Tree -> Tree) -> PGF -> String -> String +translate tr gr s = case parseAllLang gr (startCat gr) s of + (lg,t:_):_ -> linearize gr lg (tr t) + _ -> "NO PARSE" -- cgit v1.2.3