summaryrefslogtreecommitdiff
path: root/src/GF/Canon
diff options
context:
space:
mode:
authoraarne <unknown>2003-11-10 07:55:45 +0000
committeraarne <unknown>2003-11-10 07:55:45 +0000
commit249d506f58a8b5f8ef87295ab3dde2d13ddd3885 (patch)
tree658679a324c4f360901c38637464e8f63b59515d /src/GF/Canon
parent4c99687f217ce258f821d55e68f5403233f6dea7 (diff)
Morphological analysis and glueing.
Diffstat (limited to 'src/GF/Canon')
-rw-r--r--src/GF/Canon/CMacros.hs12
-rw-r--r--src/GF/Canon/MkGFC.hs3
2 files changed, 15 insertions, 0 deletions
diff --git a/src/GF/Canon/CMacros.hs b/src/GF/Canon/CMacros.hs
index 17433e48b..d32f639b4 100644
--- a/src/GF/Canon/CMacros.hs
+++ b/src/GF/Canon/CMacros.hs
@@ -152,3 +152,15 @@ redirectIdent n f@(CIQ _ c) = CIQ n c
ciq n f = CIQ n f
+wordsInTerm :: Term -> [String]
+wordsInTerm trm = filter (not . null) $ case trm of
+ K (KS s) -> [s]
+ S c _ -> wo c
+ R rs -> concat [wo t | Ass _ t <- rs]
+ T _ cs -> concat [wo t | Cas _ t <- cs]
+ C s t -> wo s ++ wo t
+ FV ts -> concatMap wo ts
+ K (KP ss vs) -> ss ++ concat [s ++ t | Var s t <- vs]
+ P t _ -> wo t --- not needed ?
+ _ -> []
+ where wo = wordsInTerm
diff --git a/src/GF/Canon/MkGFC.hs b/src/GF/Canon/MkGFC.hs
index 7547280a9..8f1e46b21 100644
--- a/src/GF/Canon/MkGFC.hs
+++ b/src/GF/Canon/MkGFC.hs
@@ -12,6 +12,9 @@ import qualified Modules as M
prCanonModInfo :: CanonModule -> String
prCanonModInfo = prt . info2mod
+prCanon :: CanonGrammar -> String
+prCanon = unlines . map prCanonModInfo . M.modules
+
canon2grammar :: Canon -> CanonGrammar
canon2grammar (Gr modules) = M.MGrammar $ map mod2info modules where
mod2info m = case m of