summaryrefslogtreecommitdiff
path: root/src/GF/CF/CFIdent.hs
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/CFIdent.hs
parent50ddb387f4495beb8bd8da2b9726a087a489df68 (diff)
floats in GF and GFC (parsing user input still doesn't work)
Diffstat (limited to 'src/GF/CF/CFIdent.hs')
-rw-r--r--src/GF/CF/CFIdent.hs25
1 files changed, 17 insertions, 8 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"