summaryrefslogtreecommitdiff
path: root/src/GF/GFCC
diff options
context:
space:
mode:
authoraarne <aarne@cs.chalmers.se>2007-11-05 13:48:51 +0000
committeraarne <aarne@cs.chalmers.se>2007-11-05 13:48:51 +0000
commit2a83f299b4fe25ee876fdd051de7f8980b216ab4 (patch)
tree12795c7b121ce0405d70bd6cb9654b74c75cbe38 /src/GF/GFCC
parent7eecf7f943ecae758a18ef0b7b268c383c2a10c4 (diff)
unionGFCC, to put together GFCC grs with same abstract
Diffstat (limited to 'src/GF/GFCC')
-rw-r--r--src/GF/GFCC/API.hs3
-rw-r--r--src/GF/GFCC/DataGFCC.hs13
2 files changed, 14 insertions, 2 deletions
diff --git a/src/GF/GFCC/API.hs b/src/GF/GFCC/API.hs
index 39f44e2a3..a35faacb5 100644
--- a/src/GF/GFCC/API.hs
+++ b/src/GF/GFCC/API.hs
@@ -77,7 +77,8 @@ startCat :: MultiGrammar -> Category
file2grammar f = do
gfcc <- file2gfcc f
let fcfgs = convertGrammar gfcc
- return (MultiGrammar gfcc [(lang, buildFCFPInfo fcfg) | (CId lang,fcfg) <- fcfgs])
+ return (MultiGrammar gfcc
+ [(lang, buildFCFPInfo fcfg) | (CId lang,fcfg) <- fcfgs])
file2gfcc f =
readFileIf f >>= err (error) (return . mkGFCC) . pGrammar . myLexer
diff --git a/src/GF/GFCC/DataGFCC.hs b/src/GF/GFCC/DataGFCC.hs
index 3d6cca3cc..ab2710e4c 100644
--- a/src/GF/GFCC/DataGFCC.hs
+++ b/src/GF/GFCC/DataGFCC.hs
@@ -21,7 +21,7 @@ data Abstr = Abstr {
aflags :: Map CId String, -- value of a flag
funs :: Map CId (Type,Exp), -- type and def of a fun
cats :: Map CId [Hypo], -- context of a cat
- catfuns :: Map CId [CId] -- funs yielding a cat (redundant, for fast lookup)
+ catfuns :: Map CId [CId] -- funs to a cat (redundant, for fast lookup)
}
data Concr = Concr {
@@ -92,6 +92,17 @@ printGFCC gfcc0 = compactPrintGFCC $ printTree $ Grm
[Lin f v | (f,v) <- assocs (printnames cnc)]
gfcc = utf8GFCC gfcc0
+
+-- merge two GFCCs; fails is differens absnames; priority to second arg
+
+unionGFCC :: GFCC -> GFCC -> GFCC
+unionGFCC one two =
+ if absname one == absname two
+ then one {
+ concretes = Data.Map.union (concretes two) (concretes one),
+ cncnames = Data.List.union (cncnames two) (cncnames one)}
+ else one
+
-- default map and filter are for Map here
lmap = Prelude.map
lfilter = Prelude.filter