summaryrefslogtreecommitdiff
path: root/src/GF/UseGrammar
diff options
context:
space:
mode:
authoraarne <aarne@cs.chalmers.se>2006-03-02 17:19:36 +0000
committeraarne <aarne@cs.chalmers.se>2006-03-02 17:19:36 +0000
commit32508e37b37a0baad884e6aaa518071b62e1e6d8 (patch)
tree9400875b1959d136da85bfb66de693ca18f66d70 /src/GF/UseGrammar
parent35aac815db52ecdb6fd12e61139d3a74545cac6d (diff)
treebanks in shell state: i -treebank and lt
Diffstat (limited to 'src/GF/UseGrammar')
-rw-r--r--src/GF/UseGrammar/Treebank.hs20
1 files changed, 18 insertions, 2 deletions
diff --git a/src/GF/UseGrammar/Treebank.hs b/src/GF/UseGrammar/Treebank.hs
index 8f5fd71a7..befbae0c0 100644
--- a/src/GF/UseGrammar/Treebank.hs
+++ b/src/GF/UseGrammar/Treebank.hs
@@ -12,7 +12,14 @@
-- Purpose: to generate treebanks.
-----------------------------------------------------------------------------
-module GF.UseGrammar.Treebank (mkTreebank,testTreebank,treesTreebank) where
+module GF.UseGrammar.Treebank (
+ mkTreebank,
+ testTreebank,
+ treesTreebank,
+ getTreebank,
+ lookupTreebank,
+ pre2treebank
+ ) where
import GF.Compile.ShellState
import GF.UseGrammar.Linear (linTree2string)
@@ -28,6 +35,7 @@ import GF.Grammar.Values (tree2exp)
import GF.Data.Operations
import GF.Infra.Option
import qualified GF.Grammar.Abstract as A
+import qualified Data.Map as M
-- Generate a treebank with a multilingual grammar. AR 8/2/2006
-- (c) Aarne Ranta 2006 under GNU GPL
@@ -74,11 +82,13 @@ puts = return -- putStrLn
ret = [] -- return ()
--
+type PreTreebank = [(String,[(String,String)])]
+
getTreebanks :: [String] -> [(String,String,String)]
getTreebanks = concatMap grps . getTreebank where
grps (t,lls) = [(t,x,y) | (x,y) <- lls]
-getTreebank :: [String] -> [(String,[(String,String)])]
+getTreebank :: [String] -> PreTreebank
getTreebank ll = case ll of
l:ls@(_:_:_) ->
let (l1,l2) = getItem ls
@@ -97,6 +107,12 @@ getTreebank ll = case ll of
getLang = takeWhile (/='"') . tail . dropWhile (/='"')
+lookupTreebank :: Treebank -> String -> [(String,String)]
+lookupTreebank tb s = maybe [] id $ M.lookup s tb
+
+pre2treebank :: PreTreebank -> Treebank
+pre2treebank tb = M.fromListWith (++) [(s,[(l,t)]) | (t,ls) <- tb, (l,s) <- ls]
+
annot :: StateGrammar -> String -> A.Tree
annot gr s = errVal (error "illegal tree") $ do
let t = tree2exp $ string2tree gr s