summaryrefslogtreecommitdiff
path: root/src/GF/Canon
diff options
context:
space:
mode:
authoraarne <unknown>2003-10-01 12:46:44 +0000
committeraarne <unknown>2003-10-01 12:46:44 +0000
commitc985dab565416251d9973f5b3bafe4d9d205b249 (patch)
treeada69513d8a20338af8058d35ce2bc75e5495d4b /src/GF/Canon
parent8ed7749eb674e3afe4485cfb3d4d50485a2cf097 (diff)
Putting def definitions in place.
Diffstat (limited to 'src/GF/Canon')
-rw-r--r--src/GF/Canon/AbsGFC.hs1
-rw-r--r--src/GF/Canon/CanonToGrammar.hs2
-rw-r--r--src/GF/Canon/MkGFC.hs20
-rw-r--r--src/GF/Canon/PrintGFC.hs3
-rw-r--r--src/GF/Canon/SkelGFC.hs5
5 files changed, 24 insertions, 7 deletions
diff --git a/src/GF/Canon/AbsGFC.hs b/src/GF/Canon/AbsGFC.hs
index 361c59d34..56adb3b4e 100644
--- a/src/GF/Canon/AbsGFC.hs
+++ b/src/GF/Canon/AbsGFC.hs
@@ -61,6 +61,7 @@ data Exp =
| EProd Ident Exp Exp
| EAbs Ident Exp
| EAtom Atom
+ | EData
| EEq [Equation]
deriving (Eq,Ord,Show)
diff --git a/src/GF/Canon/CanonToGrammar.hs b/src/GF/Canon/CanonToGrammar.hs
index 550dc37a4..e42c273cb 100644
--- a/src/GF/Canon/CanonToGrammar.hs
+++ b/src/GF/Canon/CanonToGrammar.hs
@@ -47,7 +47,7 @@ redInfo (c,info) = errIn ("decompiling abstract" +++ show c) $ do
c' <- redIdent c
info' <- case info of
AbsCat cont fs -> do
- return $ G.AbsCat (Yes cont) (Yes fs)
+ return $ G.AbsCat (Yes cont) (Yes (map (uncurry G.Q) fs))
AbsFun typ df -> do
return $ G.AbsFun (Yes typ) (Yes df)
diff --git a/src/GF/Canon/MkGFC.hs b/src/GF/Canon/MkGFC.hs
index d7641ca21..25feb5a47 100644
--- a/src/GF/Canon/MkGFC.hs
+++ b/src/GF/Canon/MkGFC.hs
@@ -67,7 +67,8 @@ trExp t = case t of
EProd x a b -> A.Prod x (trExp a) (trExp b)
EAbs x b -> A.Abs x (trExp b)
EApp f a -> A.App (trExp f) (trExp a)
- EEq _ -> A.Eqs [] ---- eqs
+ EEq eqs -> A.Eqs [(map trPt ps, trExp e) | Equ ps e <- eqs]
+ EData -> A.EData
_ -> trAt t
where
trAt (EAtom t) = case t of
@@ -78,6 +79,12 @@ trExp t = case t of
AT s -> A.Sort $ prt s
AS s -> A.K s
AI i -> A.EInt $ fromInteger i
+ trPt p = case p of
+ APC mc ps -> let (m,c) = trQIdent mc in A.PP m c (map trPt ps)
+ APV x -> A.PV x
+ APS s -> A.PString s
+ API i -> A.PInt $ fromInteger i
+ APW -> A.PW
trQIdent (CIQ m c) = (m,c)
@@ -102,7 +109,8 @@ rtExp t = case t of
A.Prod x a b -> EProd (rtIdent x) (rtExp a) (rtExp b)
A.Abs x b -> EAbs (rtIdent x) (rtExp b)
A.App f a -> EApp (rtExp f) (rtExp a)
- A.Eqs _ -> EEq [] ---- eqs
+ A.Eqs eqs -> EEq [Equ (map rtPt ps) (rtExp e) | (ps,e) <- eqs]
+ A.EData -> EData
_ -> EAtom $ rtAt t
where
rtAt t = case t of
@@ -114,6 +122,14 @@ rtExp t = case t of
A.K s -> AS s
A.EInt i -> AI $ toInteger i
_ -> error $ "MkGFC.rt not defined for" +++ show t
+ rtPt p = case p of
+ A.PP m c ps -> APC (rtQIdent (m,c)) (map rtPt ps)
+ A.PV x -> APV x
+ A.PString s -> APS s
+ A.PInt i -> API $ toInteger i
+ A.PW -> APW
+ _ -> error $ "MkGFC.rt not defined for" +++ show p
+
rtQIdent (m,c) = CIQ (rtIdent m) (rtIdent c)
rtIdent x
diff --git a/src/GF/Canon/PrintGFC.hs b/src/GF/Canon/PrintGFC.hs
index c4f2e7d62..bc89ffd6f 100644
--- a/src/GF/Canon/PrintGFC.hs
+++ b/src/GF/Canon/PrintGFC.hs
@@ -163,6 +163,7 @@ instance Print Exp where
EAtom atom -> prPrec i 2 (concat [prt 0 atom])
EAbs id exp -> prPrec i 0 (concat [["\\"] , prt 0 id , ["->"] , prt 0 exp])
EEq equations -> prPrec i 0 (concat [["{"] , prt 0 equations , ["}"]])
+ EData -> prPrec i 2 (concat [["data"]])
instance Print Sort where
prt i e = case e of
@@ -185,7 +186,7 @@ instance Print APatt where
APW -> prPrec i 0 (concat [["_"]])
prtList es = case es of
- [x] -> (concat [prt 0 x])
+ [] -> (concat [])
x:xs -> (concat [prt 0 x , prt 0 xs])
instance Print Atom where
diff --git a/src/GF/Canon/SkelGFC.hs b/src/GF/Canon/SkelGFC.hs
index e75b66636..955cc442f 100644
--- a/src/GF/Canon/SkelGFC.hs
+++ b/src/GF/Canon/SkelGFC.hs
@@ -1,7 +1,5 @@
module SkelGFC where
-import Ident
-
-- Haskell module generated by the BNF converter
import AbsGFC
@@ -13,7 +11,7 @@ failure x = Bad $ "Undefined case: " ++ show x
transIdent :: Ident -> Result
transIdent x = case x of
- _ -> failure x
+ Ident str -> failure x
transCanon :: Canon -> Result
@@ -83,6 +81,7 @@ transExp x = case x of
EProd id exp0 exp -> failure x
EAbs id exp -> failure x
EAtom atom -> failure x
+ EData -> failure x
EEq equations -> failure x