summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authoraarne <aarne@cs.chalmers.se>2006-09-05 13:10:55 +0000
committeraarne <aarne@cs.chalmers.se>2006-09-05 13:10:55 +0000
commit62c21539db7678fba21c65aabab51cc0a1226a46 (patch)
treec5d858f476fd0de09f4972876e48075cc6754308 /src
parent8484cfab1b1d27ba7046798c2821c138e4f5fabf (diff)
started analysing labels for GFCC
Diffstat (limited to 'src')
-rw-r--r--src/GF/Canon/CanonToGFCC.hs21
1 files changed, 15 insertions, 6 deletions
diff --git a/src/GF/Canon/CanonToGFCC.hs b/src/GF/Canon/CanonToGFCC.hs
index ba2a5ae27..52488148c 100644
--- a/src/GF/Canon/CanonToGFCC.hs
+++ b/src/GF/Canon/CanonToGFCC.hs
@@ -71,7 +71,7 @@ mkTerm tr = case tr of
K (KS s) -> C.K (C.KS s)
K (KP ss _) -> C.K (C.KP ss []) ---- TODO: prefix variants
E -> C.S []
- Par _ _ -> C.C 123 ---- just for debugging
+ Par _ _ -> C.C 456 ---- just for debugging
_ -> C.S [C.K (C.KS (A.prt tr))] ---- just for debugging
where
mkLab (L (IC l)) = case l of
@@ -98,7 +98,7 @@ canon2canon cgr = M.MGrammar $ reorder $ map c2c $ M.modules cgr where
mos = M.allModMod cgr
concr la = sortBy (\ (f,_) (g,_) -> compare f g)
[finfo |
- (i,mo) <- mos, M.isModCnc mo, -----
+ (i,mo) <- mos, M.isModCnc mo, ----- TODO: separate langs
finfo <- tree2list (M.jments mo)]
c2c (c,m) = case m of
@@ -112,15 +112,24 @@ canon2canon cgr = M.MGrammar $ reorder $ map c2c $ M.modules cgr where
term2term :: CanonGrammar -> Ident -> Term -> Term
term2term cgr c tr = case tr of
- Par (CIQ _ c) _ -> EInt 456 ----
- R rs -> R [Ass (l2l l) (t2t t) | Ass l t <- rs] ----
- P t l -> P (t2t t) (l2l l)
+ Par (CIQ _ c) ps | any isVar ps -> mkCase c ps
+ Par (CIQ _ c) _ -> EInt $ valNum tr
+ R rs | any isStrField rs -> R [Ass (r2r l) (t2t t) | Ass l t <- rs]
+ R rs -> EInt $ valNum tr
+ P t l -> P (t2t t) (r2r l)
T ty cs -> V ty [t2t t | Cas _ t <- cs]
S t p -> S (t2t t) (t2t p)
_ -> composSafeOp t2t tr
where
t2t = term2term cgr c
- l2l l = L (IC "_123") ----
+ r2r l = L (IC "_111") ---- TODO: number of label
+ valNum tr = 456 ---- TODO: number of param value
+ isStrField a = True ---- TODO: check if record has strings
+ mkCase c ps = EInt 666 ---- TODO: expand param constr with var
+ isVar p = case p of
+ Arg _ -> True
+ _ -> False
+
optConcrete :: [C.CncDef] -> [C.CncDef]
optConcrete defs = subex [C.Lin f (optTerm t) | C.Lin f t <- defs]