diff options
| author | aarne <aarne@cs.chalmers.se> | 2007-11-05 13:48:51 +0000 |
|---|---|---|
| committer | aarne <aarne@cs.chalmers.se> | 2007-11-05 13:48:51 +0000 |
| commit | 2a83f299b4fe25ee876fdd051de7f8980b216ab4 (patch) | |
| tree | 12795c7b121ce0405d70bd6cb9654b74c75cbe38 /src/GF/GFCC | |
| parent | 7eecf7f943ecae758a18ef0b7b268c383c2a10c4 (diff) | |
unionGFCC, to put together GFCC grs with same abstract
Diffstat (limited to 'src/GF/GFCC')
| -rw-r--r-- | src/GF/GFCC/API.hs | 3 | ||||
| -rw-r--r-- | src/GF/GFCC/DataGFCC.hs | 13 |
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 |
