summaryrefslogtreecommitdiff
path: root/src-3.0/GF/Compile
diff options
context:
space:
mode:
authorkrasimir <krasimir@chalmers.se>2008-05-30 09:10:28 +0000
committerkrasimir <krasimir@chalmers.se>2008-05-30 09:10:28 +0000
commit1172539a9544ed999c565053b79cf6a30ec14de4 (patch)
treee6b5e023fcede14ae7750e68c63154ac18b68940 /src-3.0/GF/Compile
parent1077fa1f30c0714933d02cf4b9c20cbe30fd9876 (diff)
change the PGF.Data.Exp type
Diffstat (limited to 'src-3.0/GF/Compile')
-rw-r--r--src-3.0/GF/Compile/GrammarToGFCC.hs34
1 files changed, 18 insertions, 16 deletions
diff --git a/src-3.0/GF/Compile/GrammarToGFCC.hs b/src-3.0/GF/Compile/GrammarToGFCC.hs
index 49ab4db70..677354280 100644
--- a/src-3.0/GF/Compile/GrammarToGFCC.hs
+++ b/src-3.0/GF/Compile/GrammarToGFCC.hs
@@ -117,22 +117,24 @@ mkExp :: A.Term -> C.Exp
mkExp t = case t of
A.Eqs eqs -> C.EEq [C.Equ (map mkPatt ps) (mkExp e) | (ps,e) <- eqs]
_ -> case GM.termForm t of
- Ok (xx,c,args) -> C.DTr [i2i x | x <- xx] (mkAt c) (map mkExp args)
- where
- mkAt c = case c of
- Q _ c -> C.AC $ i2i c
- QC _ c -> C.AC $ i2i c
- Vr x -> C.AV $ i2i x
- EInt i -> C.AI i
- EFloat f -> C.AF f
- K s -> C.AS s
- Meta (MetaSymb i) -> C.AM $ toInteger i
- _ -> C.AM 0
- mkPatt p = uncurry CM.tree $ case p of
- A.PP _ c ps -> (C.AC (i2i c), map mkPatt ps)
- A.PV x -> (C.AV (i2i x), [])
- A.PW -> (C.AV wildCId, [])
- A.PInt i -> (C.AI i, [])
+ Ok (xs,c,args) -> mkAbs xs (mkApp c (map mkExp args))
+ where
+ mkAbs [] t = t
+ mkAbs xs t = C.EAbs [i2i x | x <- xs] t
+ mkApp c args = case c of
+ Q _ c -> C.EApp (i2i c) args
+ QC _ c -> C.EApp (i2i c) args
+ Vr x -> C.EVar (i2i x)
+ EInt i -> C.EInt i
+ EFloat f -> C.EFloat f
+ K s -> C.EStr s
+ Meta (MetaSymb i) -> C.EMeta (toInteger i)
+ _ -> C.EMeta 0
+ mkPatt p = case p of
+ A.PP _ c ps -> C.EApp (i2i c) (map mkPatt ps)
+ A.PV x -> C.EVar (i2i x)
+ A.PW -> C.EVar wildCId
+ A.PInt i -> C.EInt i
mkContext :: A.Context -> [C.Hypo]
mkContext hyps = [C.Hyp (i2i x) (mkType ty) | (x,ty) <- hyps]