summaryrefslogtreecommitdiff
path: root/src/GF/CF
diff options
context:
space:
mode:
authoraarne <aarne@cs.chalmers.se>2005-12-02 13:13:14 +0000
committeraarne <aarne@cs.chalmers.se>2005-12-02 13:13:14 +0000
commitdea5158cbf1c11d45f2ed91d9975fbc77245e652 (patch)
tree751ef7bcaccf58c43354d5b1767d3b3d3d1ac34d /src/GF/CF
parent50ddb387f4495beb8bd8da2b9726a087a489df68 (diff)
floats in GF and GFC (parsing user input still doesn't work)
Diffstat (limited to 'src/GF/CF')
-rw-r--r--src/GF/CF/CFIdent.hs25
-rw-r--r--src/GF/CF/CanonToCF.hs3
2 files changed, 19 insertions, 9 deletions
diff --git a/src/GF/CF/CFIdent.hs b/src/GF/CF/CFIdent.hs
index fe1f1b663..0cf793827 100644
--- a/src/GF/CF/CFIdent.hs
+++ b/src/GF/CF/CFIdent.hs
@@ -14,17 +14,18 @@
module GF.CF.CFIdent (-- * Tokens and categories
CFTok(..), CFCat(..),
- tS, tC, tL, tI, tV, tM, tInt,
+ tS, tC, tL, tI, tF, tV, tM, tInt,
prCFTok,
-- * Function names and profiles
CFFun(..), Profile,
wordsCFTok,
-- * CF Functions
- mkCFFun, varCFFun, consCFFun, string2CFFun, stringCFFun, intCFFun, dummyCFFun,
+ mkCFFun, varCFFun, consCFFun, string2CFFun, stringCFFun,
+ intCFFun, floatCFFun, dummyCFFun,
cfFun2String, cfFun2Ident, cfFun2Profile, metaCFFun,
-- * CF Categories
mkCIdent, ident2CFCat, labels2CFCat, string2CFCat,
- catVarCF, cat2CFCat, cfCatString, cfCatInt,
+ catVarCF, cat2CFCat, cfCatString, cfCatInt,cfCatFloat,
moduleOfCFCat, cfCat2Cat, cfCat2Ident, lexCFCat,
-- * CF Tokens
string2CFTok, str2cftoks,
@@ -48,7 +49,8 @@ data CFTok =
TS String -- ^ normal strings
| TC String -- ^ strings that are ambiguous between upper or lower case
| TL String -- ^ string literals
- | TI Int -- ^ integer literals
+ | TI Integer -- ^ integer literals
+ | TF Double -- ^ float literals
| TV Ident -- ^ variables
| TM Int String -- ^ metavariables; the integer identifies it
deriving (Eq, Ord, Show)
@@ -60,6 +62,7 @@ tS :: String -> CFTok
tC :: String -> CFTok
tL :: String -> CFTok
tI :: String -> CFTok
+tF :: String -> CFTok
tV :: String -> CFTok
tM :: String -> CFTok
@@ -67,10 +70,11 @@ tS = TS
tC = TC
tL = TL
tI = TI . read
+tF = TF . read
tV = TV . identC
tM = TM 0
-tInt :: Int -> CFTok
+tInt :: Integer -> CFTok
tInt = TI
prCFTok :: CFTok -> String
@@ -79,6 +83,7 @@ prCFTok t = case t of
TC s -> s
TL s -> s
TI i -> show i
+ TF i -> show i
TV x -> prt x
TM i m -> m --- "?" --- m
@@ -113,8 +118,11 @@ string2CFFun m c = consCFFun $ mkCIdent m c
stringCFFun :: String -> CFFun
stringCFFun = mkCFFun . AS
-intCFFun :: Int -> CFFun
-intCFFun = mkCFFun . AI . toInteger
+intCFFun :: Integer -> CFFun
+intCFFun = mkCFFun . AI
+
+floatCFFun :: Double -> CFFun
+floatCFFun = mkCFFun . AF
-- | used in lexer-by-need rules
dummyCFFun :: CFFun
@@ -166,8 +174,9 @@ cat2CFCat = uncurry idents2CFCat
cfCatString :: CFCat
cfCatString = string2CFCat (prt cPredefAbs) "String"
-cfCatInt :: CFCat
+cfCatInt, cfCatFloat :: CFCat
cfCatInt = string2CFCat (prt cPredefAbs) "Int"
+cfCatFloat = string2CFCat (prt cPredefAbs) "Float"
diff --git a/src/GF/CF/CanonToCF.hs b/src/GF/CF/CanonToCF.hs
index 6ce443351..882860b2c 100644
--- a/src/GF/CF/CanonToCF.hs
+++ b/src/GF/CF/CanonToCF.hs
@@ -190,7 +190,8 @@ mkCFPredef opts binds rules = (ruls, \s -> preds0 s ++ look s) where
[(cat, metaCFFun) | TM _ _ <- [s], cat <- cats] ++
[(cat, varCFFun x) | TV x <- [s], cat <- catVarCF : bindcats] ++
[(cfCatString, stringCFFun t) | TL t <- [s]] ++
- [(cfCatInt, intCFFun t) | TI t <- [s]]
+ [(cfCatInt, intCFFun t) | TI t <- [s]] ++
+ [(cfCatFloat, floatCFFun t) | TF t <- [s]]
cats = nub [c | (_,rs) <- rules, (_,(_,its)) <- rs, CFNonterm c <- its]
bindcats = [c | c <- cats, elem (cfCat2Ident c) binds]
look = concatMap snd . map (trieLookup preds) . wordsCFTok --- for TC tokens