summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authoraarne <aarne@cs.chalmers.se>2007-07-03 07:11:30 +0000
committeraarne <aarne@cs.chalmers.se>2007-07-03 07:11:30 +0000
commite0071bc69c1fef54d5a99db6d43dc00375850f09 (patch)
treef6ebdbebd2d2e6e96d4c7cb90a5c67d660a202bb /src
parent6fc3bbd45794b78c3363060b9491459b414e3066 (diff)
generalized MakeOverload to TreeSelections
Diffstat (limited to 'src')
-rw-r--r--src/GF/Shell.hs2
-rw-r--r--src/GF/UseGrammar/TreeSelections.hs (renamed from src/GF/UseGrammar/MakeOverload.hs)26
2 files changed, 16 insertions, 12 deletions
diff --git a/src/GF/Shell.hs b/src/GF/Shell.hs
index 139a2ab07..e0b01f18f 100644
--- a/src/GF/Shell.hs
+++ b/src/GF/Shell.hs
@@ -30,7 +30,7 @@ import GF.Grammar.Values
import GF.UseGrammar.GetTree
import GF.UseGrammar.Generate (generateAll) ---- should be in API
import GF.UseGrammar.Treebank
-import GF.UseGrammar.MakeOverload (getOverloadResults)
+import GF.UseGrammar.TreeSelections (getOverloadResults)
import GF.Shell.ShellCommands
diff --git a/src/GF/UseGrammar/MakeOverload.hs b/src/GF/UseGrammar/TreeSelections.hs
index 1d574d001..9bf2711be 100644
--- a/src/GF/UseGrammar/MakeOverload.hs
+++ b/src/GF/UseGrammar/TreeSelections.hs
@@ -1,6 +1,6 @@
----------------------------------------------------------------------
-- |
--- Module : MakeOverload
+-- Module : TreeSelections
-- Maintainer : AR
-- Stability : (stable)
-- Portability : (portable)
@@ -8,7 +8,11 @@
-- choose shallowest trees, and remove an overload resolution prefix
-----------------------------------------------------------------------------
-module GF.UseGrammar.MakeOverload where
+module GF.UseGrammar.TreeSelections (
+
+ getOverloadResults, smallestTrs, sizeTr, depthTr
+
+ ) where
import GF.Grammar.Abstract
import GF.Grammar.Macros
@@ -23,9 +27,10 @@ import Data.List
-- In addition, the overload prefix "ovrld123_", is removed
-- from each constructor in which it appears. This is used for
-- showing the library API constructors in a parsable grammar.
+-- TODO: access the generic functions smallestTrs, sizeTr, depthTr from shell
getOverloadResults :: [Tree] -> [Tree]
-getOverloadResults = smallestTrs . map mkOverload
+getOverloadResults = smallestTrs sizeTr . map (mkOverload "ovrld")
-- NB: this does not always give the desired result, since
-- some genuine alternatives may be deeper: now we will exclude the
@@ -48,12 +53,10 @@ getOverloadResults = smallestTrs . map mkOverload
-- mkS presentTense (mkCl (mkNP he_Pron) love_V2 that_NP)
--
-
-smallestTrs :: [Tr a] -> [Tr a]
-smallestTrs ts = map fst $ filter ((==mx) . snd) tds where
+smallestTrs :: (Tr a -> Int) -> [Tr a] -> [Tr a]
+smallestTrs size ts = map fst $ filter ((==mx) . snd) tds where
tds = [(t, size t) | t <- ts]
mx = minimum $ map snd tds
- size = sizeTr -- depthTr
depthTr :: Tr a -> Int
depthTr (Tr (_, ts)) = case ts of
@@ -63,11 +66,12 @@ depthTr (Tr (_, ts)) = case ts of
sizeTr :: Tr a -> Int
sizeTr (Tr (_, ts)) = 1 + sum (map sizeTr ts)
--- format: ovrld123_mkNP
+-- remove from each constant a prefix starting with "pref", up to first "_"
+-- example format: ovrld123_mkNP
-mkOverload :: Tree -> Tree
-mkOverload = mapTr (changeAtom overAtom) where
+mkOverload :: String -> Tree -> Tree
+mkOverload pref = mapTr (changeAtom overAtom) where
overAtom a = case a of
- AtC (m, IC f) | take 5 f == "ovrld" ->
+ AtC (m, IC f) | isPrefixOf pref f ->
AtC (m, IC (tail (dropWhile (/='_') f)))
_ -> a