summaryrefslogtreecommitdiff
path: root/src/GF/CF
diff options
context:
space:
mode:
authoraarne <unknown>2003-11-03 16:27:55 +0000
committeraarne <unknown>2003-11-03 16:27:55 +0000
commit94326929b144913642121bef8f8ecc98feb992e7 (patch)
tree07d59cc33cbef2ac79c6f3f573b9718c51322e7a /src/GF/CF
parent2728e6e7ceec92c7f781368b4a523b37e5dee3b9 (diff)
Fixed several things, e.g. tokenizer.
Diffstat (limited to 'src/GF/CF')
-rw-r--r--src/GF/CF/CFIdent.hs21
-rw-r--r--src/GF/CF/CanonToCF.hs18
2 files changed, 17 insertions, 22 deletions
diff --git a/src/GF/CF/CFIdent.hs b/src/GF/CF/CFIdent.hs
index ab86b8bd4..02343bfb7 100644
--- a/src/GF/CF/CFIdent.hs
+++ b/src/GF/CF/CFIdent.hs
@@ -56,23 +56,17 @@ type Profile = [([[Int]],[Int])]
mkCFFun :: Atom -> CFFun
mkCFFun t = CFFun (t,[])
-{- ----
-getCFLiteral :: String -> Maybe (CFCat, CFFun)
-getCFLiteral s = case lookupLiteral' s of
- Ok (c, lit) -> Just (cat2CFCat c, mkCFFun lit)
- _ -> Nothing
--}
-
varCFFun :: Ident -> CFFun
varCFFun = mkCFFun . AV
consCFFun :: CIdent -> CFFun
consCFFun = mkCFFun . AC
-{- ----
-string2CFFun :: String -> CFFun
-string2CFFun = consCFFun . Ident
--}
+stringCFFun :: String -> CFFun
+stringCFFun = mkCFFun . AS
+
+intCFFun :: Int -> CFFun
+intCFFun = mkCFFun . AI . toInteger
cfFun2String :: CFFun -> String
cfFun2String (CFFun (f,_)) = prt f
@@ -110,6 +104,11 @@ catVarCF = ident2CFCat (mkCIdent "_" "#Var") (identC "_") ----
cat2CFCat :: (Ident,Ident) -> CFCat
cat2CFCat = uncurry idents2CFCat
+---- literals
+cfCatString = string2CFCat "Predef" "String"
+cfCatInt = string2CFCat "Predef" "Int"
+
+
{- ----
uCFCat :: CFCat
diff --git a/src/GF/CF/CanonToCF.hs b/src/GF/CF/CanonToCF.hs
index 6f7dc6d6b..6651b0100 100644
--- a/src/GF/CF/CanonToCF.hs
+++ b/src/GF/CF/CanonToCF.hs
@@ -27,8 +27,9 @@ canon2cf opts gr c = do
let mms = [(a, tree2list (M.jments m)) | m <- cncs]
rules0 <- liftM concat $ mapM (uncurry (cnc2cfCond opts)) mms
let rules = filter (not . isCircularCF) rules0 ---- temporarily here
- let predef = const [] ---- mkCFPredef cfcats
- return $ CF (groupCFRules rules, predef)
+ let grules = groupCFRules rules
+ let predef = mkCFPredef $ map fst grules
+ return $ CF (grules, predef)
cnc2cfCond :: Options -> Ident -> [(Ident,Info)] -> Err [CFRule]
cnc2cfCond opts m gr =
@@ -144,14 +145,9 @@ term2CFItems m t = errIn "forming cf items" $ case t of
---- ??
_ -> prtBad "cannot extract record field from" arg
-{- Proof + 1 @ 4 catVarCF :: CFCat
-PNonterm CIdent Integer Label Bool -- cat, position, part/bind, whether arg
-
-
mkCFPredef :: [CFCat] -> CFPredef
mkCFPredef cats s =
- [(cat, metaCFFun) | TM _ _ <- [s], cat <- cats] ++
- [(cat, varCFFun x) | TV x <- [s], cat <- cats] ++
- [(cat, lit) | TL t <- [s], Just (cat,lit) <- [getCFLiteral t]] ++
- [(cat, lit) | TI i <- [s], Just (cat,lit) <- [getCFLiteral (show i)]] ---
--}
+ [(cat, metaCFFun) | TM _ _ <- [s], cat <- cats] ++
+ [(cat, varCFFun x) | TV x <- [s], cat <- cats] ++
+ [(cfCatString, stringCFFun t) | TL t <- [s]] ++
+ [(cfCatInt, intCFFun t) | TI t <- [s]]