diff options
| author | krasimir <krasimir@chalmers.se> | 2008-06-19 12:48:29 +0000 |
|---|---|---|
| committer | krasimir <krasimir@chalmers.se> | 2008-06-19 12:48:29 +0000 |
| commit | 4dd62417dc64609e0c37633fbbba52e82c221b2e (patch) | |
| tree | ba6404c44f7f681c40a7dea5521243f0ede9c752 /src-3.0/PGF/ExprSyntax.hs | |
| parent | 944eea8de9e077d1b3ee1a9edad9c52e9dbc2bd0 (diff) | |
split the Exp type to Tree and Expr
Diffstat (limited to 'src-3.0/PGF/ExprSyntax.hs')
| -rw-r--r-- | src-3.0/PGF/ExprSyntax.hs | 73 |
1 files changed, 0 insertions, 73 deletions
diff --git a/src-3.0/PGF/ExprSyntax.hs b/src-3.0/PGF/ExprSyntax.hs deleted file mode 100644 index ee4be36ea..000000000 --- a/src-3.0/PGF/ExprSyntax.hs +++ /dev/null @@ -1,73 +0,0 @@ -module PGF.ExprSyntax(readExp, showExp,
- pExp,ppExp,
-
- -- helpers
- pIdent,pStr
- ) where
-
-import PGF.CId
-import PGF.Data
-
-import Data.Char
-import Control.Monad
-import qualified Text.PrettyPrint as PP
-import qualified Text.ParserCombinators.ReadP as RP
-
-
--- | parses 'String' as an expression
-readExp :: String -> Maybe Exp
-readExp s = case [x | (x,cs) <- RP.readP_to_S (pExp False) s, all isSpace cs] of
- [x] -> Just x
- _ -> Nothing
-
--- | renders expression as 'String'
-showExp :: Exp -> String
-showExp = PP.render . ppExp False
-
-pExps :: RP.ReadP [Exp]
-pExps = liftM2 (:) (pExp True) pExps RP.<++ (RP.skipSpaces >> return [])
-
-pExp :: Bool -> RP.ReadP Exp
-pExp isNested = RP.skipSpaces >> (pParen RP.<++ pAbs RP.<++ pApp RP.<++ pNum RP.<++
- liftM EStr pStr RP.<++ pMeta)
- where
- pParen = RP.between (RP.char '(') (RP.char ')') (pExp False)
- pAbs = do xs <- RP.between (RP.char '\\') (RP.skipSpaces >> RP.string "->") (RP.sepBy1 (RP.skipSpaces >> pCId) (RP.skipSpaces >> RP.char ','))
- t <- pExp False
- return (EAbs xs t)
- pApp = do f <- pCId
- ts <- (if isNested then return [] else pExps)
- return (EApp f ts)
- pMeta = do RP.char '?'
- x <- RP.munch1 isDigit
- return (EMeta (read x))
- pNum = do x <- RP.munch1 isDigit
- ((RP.char '.' >> RP.munch1 isDigit >>= \y -> return (EFloat (read (x++"."++y))))
- RP.<++
- (return (EInt (read x))))
-
-pStr = RP.char '"' >> (RP.manyTill (pEsc RP.<++ RP.get) (RP.char '"'))
- where
- pEsc = RP.char '\\' >> RP.get
-
-pCId = fmap mkCId pIdent
-
-pIdent = liftM2 (:) (RP.satisfy isIdentFirst) (RP.munch isIdentRest)
- where
- isIdentFirst c = c == '_' || isLetter c
- isIdentRest c = c == '_' || c == '\'' || isAlphaNum c
-
-ppExp isNested (EAbs xs t) = ppParens isNested (PP.char '\\' PP.<>
- PP.hsep (PP.punctuate PP.comma (map (PP.text . prCId) xs)) PP.<+>
- PP.text "->" PP.<+>
- ppExp False t)
-ppExp isNested (EApp f []) = PP.text (prCId f)
-ppExp isNested (EApp f ts) = ppParens isNested (PP.text (prCId f) PP.<+> PP.hsep (map (ppExp True) ts))
-ppExp isNested (EStr s) = PP.text (show s)
-ppExp isNested (EInt n) = PP.integer n
-ppExp isNested (EFloat d) = PP.double d
-ppExp isNested (EMeta n) = PP.char '?' PP.<> PP.int n
-ppExp isNested (EVar id) = PP.text (prCId id)
-
-ppParens True = PP.parens
-ppParens False = id
|
