mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-05-08 10:42:50 -06:00
floats in GF and GFC (parsing user input still doesn't work)
This commit is contained in:
@@ -90,6 +90,7 @@ data APatt =
|
||||
| APV Ident
|
||||
| APS String
|
||||
| API Integer
|
||||
| APF Double
|
||||
| APW
|
||||
deriving (Eq,Ord,Show)
|
||||
|
||||
@@ -100,6 +101,7 @@ data Atom =
|
||||
| AM Integer
|
||||
| AS String
|
||||
| AI Integer
|
||||
| AF Double
|
||||
| AT Sort
|
||||
deriving (Eq,Ord,Show)
|
||||
|
||||
@@ -132,6 +134,7 @@ data Term =
|
||||
| C Term Term
|
||||
| FV [Term]
|
||||
| EInt Integer
|
||||
| EFloat Double
|
||||
| K Tokn
|
||||
| E
|
||||
deriving (Eq,Ord,Show)
|
||||
@@ -170,6 +173,7 @@ data Patt =
|
||||
| PW
|
||||
| PR [PattAssign]
|
||||
| PI Integer
|
||||
| PF Double
|
||||
deriving (Eq,Ord,Show)
|
||||
|
||||
data PattAssign =
|
||||
|
||||
@@ -130,6 +130,7 @@ term2patt trm = case trm of
|
||||
return (PR (map (uncurry PAss) (zip ll aa')))
|
||||
LI x -> return $ PV x
|
||||
EInt i -> return $ PI i
|
||||
EFloat i -> return $ PF i
|
||||
FV (t:_) -> term2patt t ----
|
||||
_ -> prtBad "no pattern corresponds to term" trm
|
||||
|
||||
@@ -140,6 +141,7 @@ patt2term p = case p of
|
||||
PW -> anyTerm ----
|
||||
PR pas -> R [ Ass lbl (patt2term q) | PAss lbl q <- pas ]
|
||||
PI i -> EInt i
|
||||
PF i -> EFloat i
|
||||
|
||||
anyTerm :: Term
|
||||
anyTerm = LI (A.identC "_") --- should not happen
|
||||
|
||||
@@ -156,7 +156,8 @@ redCTerm x = case x of
|
||||
C term0 term -> liftM2 G.C (redCTerm term0) (redCTerm term)
|
||||
FV terms -> liftM G.FV $ mapM redCTerm terms
|
||||
K (KS str) -> return $ G.K str
|
||||
EInt i -> return $ G.EInt $ fromInteger i
|
||||
EInt i -> return $ G.EInt i
|
||||
EFloat i -> return $ G.EFloat i
|
||||
E -> return $ G.Empty
|
||||
K (KP d vs) -> return $
|
||||
G.Alts (tList d,[(tList s, G.Strs $ map G.K v) | Var s v <- vs])
|
||||
@@ -187,6 +188,7 @@ redPatt p = case p of
|
||||
ls' = map redLabel ls
|
||||
ts <- mapM redPatt ts
|
||||
return $ G.PR $ zip ls' ts
|
||||
PI i -> return $ G.PInt (fromInteger i)
|
||||
PI i -> return $ G.PInt i
|
||||
PF i -> return $ G.PFloat i
|
||||
_ -> Bad $ "cannot recompile pattern" +++ show p
|
||||
|
||||
|
||||
@@ -80,6 +80,7 @@ APC. APatt ::= "(" CIdent [APatt] ")" ;
|
||||
APV. APatt ::= Ident ;
|
||||
APS. APatt ::= String ;
|
||||
API. APatt ::= Integer ;
|
||||
APF. APatt ::= Double ;
|
||||
APW. APatt ::= "_" ;
|
||||
|
||||
separator Decl ";" ;
|
||||
@@ -120,7 +121,8 @@ S. Term1 ::= Term1 "!" Term2 ;
|
||||
C. Term ::= Term "++" Term1 ;
|
||||
FV. Term1 ::= "variants" "{" [Term2] "}" ; --- no separator!
|
||||
|
||||
EInt. Term2 ::= Integer ;
|
||||
EInt. Term2 ::= Integer ;
|
||||
EFloat. Term2 ::= Double ;
|
||||
K. Term2 ::= Tokn ;
|
||||
E. Term2 ::= "[" "]" ;
|
||||
|
||||
@@ -144,6 +146,7 @@ PV. Patt ::= Ident ;
|
||||
PW. Patt ::= "_" ;
|
||||
PR. Patt ::= "{" [PattAssign] "}" ;
|
||||
PI. Patt ::= Integer ;
|
||||
PF. Patt ::= Double ;
|
||||
|
||||
PAss. PattAssign ::= Label "=" Patt ;
|
||||
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -231,6 +231,7 @@ instance Print APatt where
|
||||
APV id -> prPrec i 0 (concatD [prt 0 id])
|
||||
APS str -> prPrec i 0 (concatD [prt 0 str])
|
||||
API n -> prPrec i 0 (concatD [prt 0 n])
|
||||
APF n -> prPrec i 0 (concatD [prt 0 n])
|
||||
APW -> prPrec i 0 (concatD [doc (showString "_")])
|
||||
|
||||
prtList es = case es of
|
||||
@@ -292,6 +293,7 @@ instance Print Term where
|
||||
C term0 term -> prPrec i 0 (concatD [prt 0 term0 , doc (showString "++") , prt 1 term])
|
||||
FV terms -> prPrec i 1 (concatD [docs (showString "variants") , doc (showString "{") , prt 2 terms , doc (showString "}")])
|
||||
EInt n -> prPrec i 2 (concatD [prt 0 n])
|
||||
EFloat n -> prPrec i 2 (concatD [prt 0 n])
|
||||
K tokn -> prPrec i 2 (concatD [prt 0 tokn])
|
||||
E -> prPrec i 2 (concatD [doc (showString "[") , doc (showString "]")])
|
||||
|
||||
@@ -356,6 +358,7 @@ instance Print Patt where
|
||||
PW -> prPrec i 0 (concatD [docs (showString "_")])
|
||||
PR pattassigns -> prPrec i 0 (concatD [doc (showString "{") , prt 0 pattassigns , doc (showString "}")])
|
||||
PI n -> prPrec i 0 (concatD [prt 0 n])
|
||||
PF n -> prPrec i 0 (concatD [prt 0 n])
|
||||
|
||||
prtList es = case es of
|
||||
[] -> (concatD [])
|
||||
|
||||
Reference in New Issue
Block a user