diff options
| author | aarne <aarne@cs.chalmers.se> | 2007-07-03 07:11:30 +0000 |
|---|---|---|
| committer | aarne <aarne@cs.chalmers.se> | 2007-07-03 07:11:30 +0000 |
| commit | e0071bc69c1fef54d5a99db6d43dc00375850f09 (patch) | |
| tree | f6ebdbebd2d2e6e96d4c7cb90a5c67d660a202bb /src | |
| parent | 6fc3bbd45794b78c3363060b9491459b414e3066 (diff) | |
generalized MakeOverload to TreeSelections
Diffstat (limited to 'src')
| -rw-r--r-- | src/GF/Shell.hs | 2 | ||||
| -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 |
