[project @ 2003-07-31 17:45:22 by ross]
authorross <unknown>
Thu, 31 Jul 2003 17:45:30 +0000 (17:45 +0000)
committerross <unknown>
Thu, 31 Jul 2003 17:45:30 +0000 (17:45 +0000)
move Parsec out of base into a package parsec (no code changes)

38 files changed:
LICENSE
Makefile
Makefile.nhc98
Text/ParserCombinators/Parsec.hs [deleted file]
Text/ParserCombinators/Parsec/Char.hs [deleted file]
Text/ParserCombinators/Parsec/Combinator.hs [deleted file]
Text/ParserCombinators/Parsec/Error.hs [deleted file]
Text/ParserCombinators/Parsec/Expr.hs [deleted file]
Text/ParserCombinators/Parsec/Language.hs [deleted file]
Text/ParserCombinators/Parsec/Perm.hs [deleted file]
Text/ParserCombinators/Parsec/Pos.hs [deleted file]
Text/ParserCombinators/Parsec/Prim.hs [deleted file]
Text/ParserCombinators/Parsec/Token.hs [deleted file]
Text/ParserCombinators/Parsec/examples/Henk/HenkAS.hs [deleted file]
Text/ParserCombinators/Parsec/examples/Henk/HenkParser.hs [deleted file]
Text/ParserCombinators/Parsec/examples/Henk/Main.hs [deleted file]
Text/ParserCombinators/Parsec/examples/Henk/test.h [deleted file]
Text/ParserCombinators/Parsec/examples/Mondrian/Main.hs [deleted file]
Text/ParserCombinators/Parsec/examples/Mondrian/MonParser.hs [deleted file]
Text/ParserCombinators/Parsec/examples/Mondrian/Mondrian.hs [deleted file]
Text/ParserCombinators/Parsec/examples/Mondrian/Prelude.m [deleted file]
Text/ParserCombinators/Parsec/examples/Mondrian/Pretty.hs [deleted file]
Text/ParserCombinators/Parsec/examples/Mondrian/SimpleMondrianPrinter.hs [deleted file]
Text/ParserCombinators/Parsec/examples/Mondrian/Utils.hs [deleted file]
Text/ParserCombinators/Parsec/examples/Mondrian/test.m [deleted file]
Text/ParserCombinators/Parsec/examples/UserGuide/Main.hs [deleted file]
Text/ParserCombinators/Parsec/examples/tiger/Main.hs [deleted file]
Text/ParserCombinators/Parsec/examples/tiger/Tiger.hs [deleted file]
Text/ParserCombinators/Parsec/examples/tiger/TigerAS.hs [deleted file]
Text/ParserCombinators/Parsec/examples/tiger/fac.tig [deleted file]
Text/ParserCombinators/Parsec/examples/tiger/matrix.tig [deleted file]
Text/ParserCombinators/Parsec/examples/tiger/merge.tig [deleted file]
Text/ParserCombinators/Parsec/examples/tiger/queens.tig [deleted file]
Text/ParserCombinators/Parsec/examples/while/Main.hs [deleted file]
Text/ParserCombinators/Parsec/examples/while/While.hs [deleted file]
Text/ParserCombinators/Parsec/examples/while/WhileAS.hs [deleted file]
Text/ParserCombinators/Parsec/examples/while/fac.wh [deleted file]
Text/ParserCombinators/Parsec/examples/while/fib.wh [deleted file]

diff --git a/LICENSE b/LICENSE
index 19f2d11..2c71966 100644 (file)
--- a/LICENSE
+++ b/LICENSE
@@ -12,9 +12,6 @@ sources:
     which is (c) Manuel M. T. Chakravarty and freely redistributable
     (but see the full license for restrictions).
 
     which is (c) Manuel M. T. Chakravarty and freely redistributable
     (but see the full license for restrictions).
 
-  * Code from the Parsec library which is (c) Daan Leijen, and
-    distributable under a BSD-style license (see below).
-
 The full text of these licenses is reproduced below.  All of the
 licenses are BSD-style or compatible.
 
 The full text of these licenses is reproduced below.  All of the
 licenses are BSD-style or compatible.
 
@@ -84,30 +81,3 @@ the following license:
   be a definition of the Haskell 98 Foreign Function Interface.
 
 -----------------------------------------------------------------------------
   be a definition of the Haskell 98 Foreign Function Interface.
 
 -----------------------------------------------------------------------------
-
-Code derived from Daan Leijen's Parsec is distributed under the following
-license:
-
-  Copyright 1999-2000, Daan Leijen. All rights reserved.
-
-  Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice,
-      this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright
-      notice, this list of conditions and the following disclaimer in the
-      documentation and/or other materials provided with the distribution.
-
-This software is provided by the copyright holders "as is" and any express or
-implied warranties, including, but not limited to, the implied warranties of
-merchantability and fitness for a particular purpose are disclaimed. In no
-event shall the copyright holders be liable for any direct, indirect,
-incidental, special, exemplary, or consequential damages (including, but not
-limited to, procurement of substitute goods or services; loss of use, data,
-or profits; or business interruption) however caused and on any theory of
-liability, whether in contract, strict liability, or tort (including
-negligence or otherwise) arising in any way out of the use of this software,
-even if advised of the possibility of such damage.
-
------------------------------------------------------------------------------
index 7ed06cb..ebc5f2e 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,5 +1,5 @@
 # -----------------------------------------------------------------------------
 # -----------------------------------------------------------------------------
-# $Id: Makefile,v 1.46 2003/07/24 13:53:20 simonmar Exp $
+# $Id: Makefile,v 1.47 2003/07/31 17:45:22 ross Exp $
 
 TOP=..
 include $(TOP)/mk/boilerplate.mk
 
 TOP=..
 include $(TOP)/mk/boilerplate.mk
@@ -33,7 +33,6 @@ ALL_DIRS = \
        Text/Html \
        Text/PrettyPrint \
        Text/ParserCombinators \
        Text/Html \
        Text/PrettyPrint \
        Text/ParserCombinators \
-       Text/ParserCombinators/Parsec \
        Text/Regex \
        Text/Show \
        Text/Read
        Text/Regex \
        Text/Show \
        Text/Read
index 74ae9c3..9668dce 100644 (file)
@@ -23,14 +23,6 @@ SRCS = \
        Foreign/Marshal/Utils.hs Foreign/Marshal/Error.hs \
        Foreign/Marshal/Pool.hs Foreign/Marshal.hs \
        Foreign/C/String.hs Foreign/C/Error.hs Foreign/C.hs Foreign.hs \
        Foreign/Marshal/Utils.hs Foreign/Marshal/Error.hs \
        Foreign/Marshal/Pool.hs Foreign/Marshal.hs \
        Foreign/C/String.hs Foreign/C/Error.hs Foreign/C.hs Foreign.hs \
-       Text/ParserCombinators/Parsec/Char.hs \
-       Text/ParserCombinators/Parsec/Combinator.hs \
-       Text/ParserCombinators/Parsec/Error.hs \
-       Text/ParserCombinators/Parsec/Expr.hs \
-       Text/ParserCombinators/Parsec/Perm.hs \
-       Text/ParserCombinators/Parsec/Pos.hs \
-       Text/ParserCombinators/Parsec/Prim.hs \
-       Text/ParserCombinators/Parsec.hs \
        Text/PrettyPrint/HughesPJ.hs Text/PrettyPrint.hs \
        Text/Html/BlockTable.hs Text/Html.hs \
        Text/Read.hs Text/Show.hs Text/Show/Functions.hs
        Text/PrettyPrint/HughesPJ.hs Text/PrettyPrint.hs \
        Text/Html/BlockTable.hs Text/Html.hs \
        Text/Read.hs Text/Show.hs Text/Show/Functions.hs
@@ -41,8 +33,6 @@ SRCS  = \
 #      System/CPUTime.hsc System/Time.hsc
 #      System/Mem.hs System/Mem/StableName.hs System/Mem/Weak.hs
 #      System/Posix/Types.hs System/Posix/Signals.hsc
 #      System/CPUTime.hsc System/Time.hsc
 #      System/Mem.hs System/Mem/StableName.hs System/Mem/Weak.hs
 #      System/Posix/Types.hs System/Posix/Signals.hsc
-#      Text/ParserCombinators/Parsec/Token.hs \
-#      Text/ParserCombinators/Parsec/Language.hs \
 #      Text/ParserCombinators/ReadP.hs Text/ParserCombinators/ReadPrec.hs
 #      Text/Read/Lex.hs
 #      Text/Regex/* Text/Regex.hs
 #      Text/ParserCombinators/ReadP.hs Text/ParserCombinators/ReadPrec.hs
 #      Text/Read/Lex.hs
 #      Text/Regex/* Text/Regex.hs
@@ -84,26 +74,6 @@ $(OBJDIR)/Foreign/Marshal/Utils.$O:  $(OBJDIR)/Data/Maybe.$O \
 $(OBJDIR)/Foreign/Marshal/Error.$O: $(OBJDIR)/Foreign/Ptr.$O
 $(OBJDIR)/Foreign/C/String.$O: $(OBJDIR)/Data/Word.$O $(OBJDIR)/Foreign/Ptr.$O \
        $(OBJDIR)/Foreign/Marshal/Array.$O $(OBJDIR)/Foreign/C/Types.$O 
 $(OBJDIR)/Foreign/Marshal/Error.$O: $(OBJDIR)/Foreign/Ptr.$O
 $(OBJDIR)/Foreign/C/String.$O: $(OBJDIR)/Data/Word.$O $(OBJDIR)/Foreign/Ptr.$O \
        $(OBJDIR)/Foreign/Marshal/Array.$O $(OBJDIR)/Foreign/C/Types.$O 
-$(OBJDIR)/Text/ParserCombinators/Parsec/Char.$O: \
-       $(OBJDIR)/Text/ParserCombinators/Parsec/Pos.$O \
-       $(OBJDIR)/Text/ParserCombinators/Parsec/Prim.$O
-$(OBJDIR)/Text/ParserCombinators/Parsec/Combinator.$O: \
-       $(OBJDIR)/Text/ParserCombinators/Parsec/Prim.$O
-$(OBJDIR)/Text/ParserCombinators/Parsec/Error.$O: \
-       $(OBJDIR)/Text/ParserCombinators/Parsec/Pos.$O
-$(OBJDIR)/Text/ParserCombinators/Parsec/Expr.$O: \
-       $(OBJDIR)/Text/ParserCombinators/Parsec/Prim.$O \
-       $(OBJDIR)/Text/ParserCombinators/Parsec/Combinator.$O
-$(OBJDIR)/Text/ParserCombinators/Parsec/Language.$O: \
-       $(OBJDIR)/Text/ParserCombinators/Parsec.$O \
-       $(OBJDIR)/Text/ParserCombinators/Parsec/Token.$O
-$(OBJDIR)/Text/ParserCombinators/Parsec/Perm.$O: \
-       $(OBJDIR)/Text/ParserCombinators/Parsec.$O
-$(OBJDIR)/Text/ParserCombinators/Parsec/Prim.$O: \
-       $(OBJDIR)/Text/ParserCombinators/Parsec/Pos.$O \
-       $(OBJDIR)/Text/ParserCombinators/Parsec/Error.$O
-$(OBJDIR)/Text/ParserCombinators/Parsec/Token.$O: \
-       $(OBJDIR)/Text/ParserCombinators/Parsec.$O
 
 # C-files dependencies.
 Data/FiniteMap.$C: Data/Maybe.$C
 
 # C-files dependencies.
 Data/FiniteMap.$C: Data/Maybe.$C
@@ -129,24 +99,4 @@ Foreign/Marshal/Utils.$C:  Data/Maybe.$C Foreign/Ptr.$C Foreign/Storable.$C \
 Foreign/Marshal/Error.$C:  Foreign/Ptr.$C
 Foreign/C/String.$C:       Data/Word.$C Foreign/Ptr.$C Foreign/C/Types.$C \
        Foreign/Marshal/Array.$C
 Foreign/Marshal/Error.$C:  Foreign/Ptr.$C
 Foreign/C/String.$C:       Data/Word.$C Foreign/Ptr.$C Foreign/C/Types.$C \
        Foreign/Marshal/Array.$C
-Text/ParserCombinators/Parsec/Char.$C: \
-       Text/ParserCombinators/Parsec/Pos.$C \
-       Text/ParserCombinators/Parsec/Prim.$C
-Text/ParserCombinators/Parsec/Combinator.$C: \
-       Text/ParserCombinators/Parsec/Prim.$C
-Text/ParserCombinators/Parsec/Error.$C: \
-       Text/ParserCombinators/Parsec/Pos.$C
-Text/ParserCombinators/Parsec/Expr.$C: \
-       Text/ParserCombinators/Parsec/Prim.$C \
-       Text/ParserCombinators/Parsec/Combinator.$C
-Text/ParserCombinators/Parsec/Language.$C: \
-       Text/ParserCombinators/Parsec.$C \
-       Text/ParserCombinators/Parsec/Token.$C
-Text/ParserCombinators/Parsec/Perm.$C: \
-       Text/ParserCombinators/Parsec.$C
-Text/ParserCombinators/Parsec/Prim.$C: \
-       Text/ParserCombinators/Parsec/Pos.$C \
-       Text/ParserCombinators/Parsec/Error.$C
-Text/ParserCombinators/Parsec/Token.$C: \
-       Text/ParserCombinators/Parsec.$C
 
 
diff --git a/Text/ParserCombinators/Parsec.hs b/Text/ParserCombinators/Parsec.hs
deleted file mode 100644 (file)
index a9ef347..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
------------------------------------------------------------------------------
--- |
--- Module      :  Text.ParserCombinators.Parsec
--- Copyright   :  (c) Daan Leijen 1999-2001
--- License     :  BSD-style (see the file libraries/base/LICENSE)
--- 
--- Maintainer  :  daan@cs.uu.nl
--- Stability   :  provisional
--- Portability :  portable
---
--- Parsec, the Fast Monadic Parser combinator library, see
--- <http://www.cs.uu.nl/people/daan/parsec.html>.
---
--- Inspired by:
---
--- * Graham Hutton and Erik Meijer:
---   Monadic Parser Combinators.
---   Technical report NOTTCS-TR-96-4. 
---   Department of Computer Science, University of Nottingham, 1996. 
---   <http://www.cs.nott.ac.uk/~gmh/monparsing.ps>
---
--- * Andrew Partridge, David Wright: 
---   Predictive parser combinators need four values to report errors.
---   Journal of Functional Programming 6(2): 355-364, 1996
---
--- This helper module exports elements from the basic libraries.
---
------------------------------------------------------------------------------
-
-module Text.ParserCombinators.Parsec
-               ( -- complete modules
-                 module Text.ParserCombinators.Parsec.Prim
-               , module Text.ParserCombinators.Parsec.Combinator
-               , module Text.ParserCombinators.Parsec.Char
-               
-               -- module Text.ParserCombinators.Parsec.Error
-               , ParseError   
-               , errorPos   
-               
-               -- module Text.ParserCombinators.Parsec.Pos
-               , SourcePos
-               , SourceName, Line, Column             
-               , sourceName, sourceLine, sourceColumn             
-               , incSourceLine, incSourceColumn
-               , setSourceLine, setSourceColumn, setSourceName
-
-             ) where
-
-import Text.ParserCombinators.Parsec.Pos            -- textual positions
-import Text.ParserCombinators.Parsec.Error          -- parse errors
-import Text.ParserCombinators.Parsec.Prim           -- primitive combinators
-import Text.ParserCombinators.Parsec.Combinator     -- derived combinators
-import Text.ParserCombinators.Parsec.Char           -- character parsers
-
diff --git a/Text/ParserCombinators/Parsec/Char.hs b/Text/ParserCombinators/Parsec/Char.hs
deleted file mode 100644 (file)
index 05f3ad0..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
------------------------------------------------------------------------------
--- |
--- Module      :  Text.ParserCombinators.Parsec.Char
--- Copyright   :  (c) Daan Leijen 1999-2001
--- License     :  BSD-style (see the file libraries/base/LICENSE)
--- 
--- Maintainer  :  daan@cs.uu.nl
--- Stability   :  provisional
--- Portability :  portable
---
--- Commonly used character parsers.
--- 
------------------------------------------------------------------------------
-
-module Text.ParserCombinators.Parsec.Char
-                  ( CharParser
-                  , spaces, space
-                  , newline, tab
-                  , upper, lower, alphaNum, letter
-                  , digit, hexDigit, octDigit
-                  , char, string
-                  , anyChar, oneOf, noneOf
-                  , satisfy
-                  ) where
-
-import Prelude
-import Data.Char
-import Text.ParserCombinators.Parsec.Pos( updatePosChar, updatePosString )
-import Text.ParserCombinators.Parsec.Prim
-
------------------------------------------------------------
--- Type of character parsers
------------------------------------------------------------
-type CharParser st a    = GenParser Char st a
-
------------------------------------------------------------
--- Character parsers
------------------------------------------------------------
-oneOf cs            = satisfy (\c -> elem c cs)
-noneOf cs           = satisfy (\c -> not (elem c cs))
-
-spaces              = skipMany space        <?> "white space"          
-space               = satisfy (isSpace)     <?> "space"
-
-newline             = char '\n'             <?> "new-line"
-tab                 = char '\t'             <?> "tab"
-
-upper               = satisfy (isUpper)     <?> "uppercase letter"
-lower               = satisfy (isLower)     <?> "lowercase letter"
-alphaNum            = satisfy (isAlphaNum)  <?> "letter or digit"
-letter              = satisfy (isAlpha)     <?> "letter"
-digit               = satisfy (isDigit)     <?> "digit"
-hexDigit            = satisfy (isHexDigit)  <?> "hexadecimal digit"
-octDigit            = satisfy (isOctDigit)  <?> "octal digit"
-
-char c              = satisfy (==c)  <?> show [c]
-anyChar             = satisfy (const True)
-
------------------------------------------------------------
--- Primitive character parsers
------------------------------------------------------------
-satisfy :: (Char -> Bool) -> CharParser st Char
-satisfy f           = tokenPrim (\c -> show [c]) 
-                                (\pos c cs -> updatePosChar pos c) 
-                                (\c -> if f c then Just c else Nothing)
-
-string :: String -> CharParser st String
-string s            = tokens show updatePosString s
diff --git a/Text/ParserCombinators/Parsec/Combinator.hs b/Text/ParserCombinators/Parsec/Combinator.hs
deleted file mode 100644 (file)
index e46e25b..0000000
+++ /dev/null
@@ -1,151 +0,0 @@
------------------------------------------------------------------------------
--- |
--- Module      :  Text.ParserCombinators.Parsec.Combinator
--- Copyright   :  (c) Daan Leijen 1999-2001
--- License     :  BSD-style (see the file libraries/base/LICENSE)
--- 
--- Maintainer  :  daan@cs.uu.nl
--- Stability   :  provisional
--- Portability :  portable
---
--- Commonly used generic combinators
--- 
------------------------------------------------------------------------------
-
-module Text.ParserCombinators.Parsec.Combinator
-                        ( choice
-                        , count
-                        , between
-                        , option, optional
-                        , skipMany1
-                        , many1
-                        , sepBy, sepBy1
-                        , endBy, endBy1
-                        , sepEndBy, sepEndBy1
-                        , chainl, chainl1
-                        , chainr, chainr1
-                        , eof, notFollowedBy
-                        
-                        -- tricky combinators
-                        , manyTill, lookAhead, anyToken
-                        ) where
-
-import Control.Monad
-import Text.ParserCombinators.Parsec.Prim
-
-
-----------------------------------------------------------------
---
-----------------------------------------------------------------
-choice :: [GenParser tok st a] -> GenParser tok st a
-choice ps           = foldr (<|>) mzero ps
-
-option :: a -> GenParser tok st a -> GenParser tok st a
-option x p          = p <|> return x
-
-optional :: GenParser tok st a -> GenParser tok st ()
-optional p          = do{ p; return ()} <|> return ()
-
-between :: GenParser tok st open -> GenParser tok st close 
-            -> GenParser tok st a -> GenParser tok st a
-between open close p
-                    = do{ open; x <- p; close; return x }
-                
-                
-skipMany1 :: GenParser tok st a -> GenParser tok st ()
-skipMany1 p         = do{ p; skipMany p }
-{-
-skipMany p          = scan
-                    where
-                      scan  = do{ p; scan } <|> return ()
--}
-
-many1 :: GenParser tok st a -> GenParser tok st [a]
-many1 p             = do{ x <- p; xs <- many p; return (x:xs) }
-{-
-many p              = scan id
-                    where
-                      scan f    = do{ x <- p
-                                    ; scan (\tail -> f (x:tail))
-                                    }
-                                <|> return (f [])
--}
-
-sepBy1,sepBy :: GenParser tok st a -> GenParser tok st sep -> GenParser tok st [a]
-sepBy p sep         = sepBy1 p sep <|> return []
-sepBy1 p sep        = do{ x <- p
-                        ; xs <- many (sep >> p)
-                        ; return (x:xs)
-                        }
-
-sepEndBy1, sepEndBy :: GenParser tok st a -> GenParser tok st sep -> GenParser tok st [a]
-sepEndBy1 p sep     = do{ x <- p
-                        ; do{ sep
-                            ; xs <- sepEndBy p sep
-                            ; return (x:xs)
-                            }
-                          <|> return [x]
-                        }
-        
-sepEndBy p sep      = sepEndBy1 p sep <|> return []
-
-
-endBy1,endBy :: GenParser tok st a -> GenParser tok st sep -> GenParser tok st [a]
-endBy1 p sep        = many1 (do{ x <- p; sep; return x })
-endBy p sep         = many (do{ x <- p; sep; return x })
-
-count :: Int -> GenParser tok st a -> GenParser tok st [a]
-count n p           | n <= 0    = return []
-                    | otherwise = sequence (replicate n p)
-
-
-chainr p op x       = chainr1 p op <|> return x
-chainl p op x       = chainl1 p op <|> return x
-
-chainr1,chainl1 :: GenParser tok st a -> GenParser tok st (a -> a -> a) -> GenParser tok st a
-chainl1 p op        = do{ x <- p; rest x }
-                    where
-                      rest x    = do{ f <- op
-                                    ; y <- p
-                                    ; rest (f x y)
-                                    }
-                                <|> return x
-                              
-chainr1 p op        = scan
-                    where
-                      scan      = do{ x <- p; rest x }
-                      
-                      rest x    = do{ f <- op
-                                    ; y <- scan
-                                    ; return (f x y)
-                                    }
-                                <|> return x
-
------------------------------------------------------------
--- Tricky combinators
------------------------------------------------------------
-anyToken :: Show tok => GenParser tok st tok
-anyToken            = tokenPrim show (\pos tok toks -> pos) Just
-
-eof :: Show tok => GenParser tok st ()
-eof                 = notFollowedBy anyToken <?> "end of input"   
-
-notFollowedBy :: Show tok => GenParser tok st tok -> GenParser tok st ()   
-notFollowedBy p     = try (do{ c <- p; unexpected (show [c]) }
-                           <|> return ()
-                          )
-
-manyTill :: GenParser tok st a -> GenParser tok st end -> GenParser tok st [a]
-manyTill p end      = scan
-                    where
-                      scan  = do{ end; return [] }
-                            <|>
-                              do{ x <- p; xs <- scan; return (x:xs) }
-
-
-lookAhead :: GenParser tok st a -> GenParser tok st a
-lookAhead p         = do{ state <- getParserState
-                        ; x <- p
-                        ; setParserState state
-                        ; return x
-                        }
diff --git a/Text/ParserCombinators/Parsec/Error.hs b/Text/ParserCombinators/Parsec/Error.hs
deleted file mode 100644 (file)
index abb3c69..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
------------------------------------------------------------------------------
--- |
--- Module      :  Text.ParserCombinators.Parsec.Error
--- Copyright   :  (c) Daan Leijen 1999-2001
--- License     :  BSD-style (see the file libraries/base/LICENSE)
--- 
--- Maintainer  :  daan@cs.uu.nl
--- Stability   :  provisional
--- Portability :  portable
---
--- Parse errors
--- 
------------------------------------------------------------------------------
-
-module Text.ParserCombinators.Parsec.Error
-                  ( Message(SysUnExpect,UnExpect,Expect,Message)
-                  , messageString, messageCompare, messageEq
-                  
-                  , ParseError, errorPos, errorMessages, errorIsUnknown
-                  , showErrorMessages
-                  
-                  , newErrorMessage, newErrorUnknown
-                  , addErrorMessage, setErrorPos, setErrorMessage
-                  , mergeError
-                  )
-                  where
-
-
-import Prelude
-import Data.List (nub,sortBy)
-import Text.ParserCombinators.Parsec.Pos 
-                          
------------------------------------------------------------
--- Messages
------------------------------------------------------------                         
-data Message        = SysUnExpect !String   --library generated unexpect            
-                    | UnExpect    !String   --unexpected something     
-                    | Expect      !String   --expecting something
-                    | Message     !String   --raw message
-                    
-messageToEnum msg
-    = case msg of SysUnExpect _ -> 0
-                  UnExpect _    -> 1
-                  Expect _      -> 2
-                  Message _     -> 3                                  
-                                      
-messageCompare :: Message -> Message -> Ordering
-messageCompare msg1 msg2
-    = compare (messageToEnum msg1) (messageToEnum msg2)
-  
-messageString :: Message -> String
-messageString msg
-    = case msg of SysUnExpect s -> s
-                  UnExpect s    -> s
-                  Expect s      -> s
-                  Message s     -> s                                  
-
-messageEq :: Message -> Message -> Bool
-messageEq msg1 msg2
-    = (messageCompare msg1 msg2 == EQ)
-    
-    
------------------------------------------------------------
--- Parse Errors
------------------------------------------------------------                           
-data ParseError     = ParseError !SourcePos [Message]
-
-errorPos :: ParseError -> SourcePos
-errorPos (ParseError pos msgs)
-    = pos
-                  
-errorMessages :: ParseError -> [Message]
-errorMessages (ParseError pos msgs)
-    = sortBy messageCompare msgs      
-        
-errorIsUnknown :: ParseError -> Bool
-errorIsUnknown (ParseError pos msgs)
-    = null msgs
-            
-            
------------------------------------------------------------
--- Create parse errors
------------------------------------------------------------                         
-newErrorUnknown :: SourcePos -> ParseError
-newErrorUnknown pos
-    = ParseError pos []
-    
-newErrorMessage :: Message -> SourcePos -> ParseError
-newErrorMessage msg pos  
-    = ParseError pos [msg]
-
-addErrorMessage :: Message -> ParseError -> ParseError
-addErrorMessage msg (ParseError pos msgs)
-    = ParseError pos (msg:msgs)
-    
-setErrorPos :: SourcePos -> ParseError -> ParseError
-setErrorPos pos (ParseError _ msgs)
-    = ParseError pos msgs
-    
-setErrorMessage :: Message -> ParseError -> ParseError
-setErrorMessage msg (ParseError pos msgs)
-    = ParseError pos (msg:filter (not . messageEq msg) msgs)
-    
-mergeError :: ParseError -> ParseError -> ParseError
-mergeError (ParseError pos msgs1) (ParseError _ msgs2)
-    = ParseError pos (msgs1 ++ msgs2)
-    
-
-
------------------------------------------------------------
--- Show Parse Errors
------------------------------------------------------------                         
-instance Show ParseError where
-  show err
-    = show (errorPos err) ++ ":" ++ 
-      showErrorMessages "or" "unknown parse error" 
-                        "expecting" "unexpected" "end of input"
-                       (errorMessages err)
-
-
--- Language independent show function
-showErrorMessages msgOr msgUnknown msgExpecting msgUnExpected msgEndOfInput msgs
-    | null msgs = msgUnknown
-    | otherwise = concat $ map ("\n"++) $ clean $
-                 [showSysUnExpect,showUnExpect,showExpect,showMessages]
-    where
-      (sysUnExpect,msgs1)   = span (messageEq (SysUnExpect "")) msgs
-      (unExpect,msgs2)      = span (messageEq (UnExpect "")) msgs1
-      (expect,messages)     = span (messageEq (Expect "")) msgs2
-    
-      showExpect        = showMany msgExpecting expect
-      showUnExpect      = showMany msgUnExpected unExpect
-      showSysUnExpect   | not (null unExpect) ||
-                          null sysUnExpect       = ""
-                        | null firstMsg          = msgUnExpected ++ " " ++ msgEndOfInput
-                        | otherwise              = msgUnExpected ++ " " ++ firstMsg
-                        where
-                          firstMsg  = messageString (head sysUnExpect)
-                        
-      showMessages      = showMany "" messages
-
-      
-      --helpers                                                                                                                                        
-      showMany pre msgs = case (clean (map messageString msgs)) of
-                            [] -> ""
-                            ms | null pre  -> commasOr ms
-                               | otherwise -> pre ++ " " ++ commasOr ms
-                            
-      commasOr []       = ""                
-      commasOr [m]      = m                
-      commasOr ms       = commaSep (init ms) ++ " " ++ msgOr ++ " " ++ last ms
-        
-      commaSep          = seperate ", " . clean
-      semiSep           = seperate "; " . clean       
-        
-      seperate sep []   = ""
-      seperate sep [m]  = m
-      seperate sep (m:ms) = m ++ sep ++ seperate sep ms                            
-      
-      clean             = nub . filter (not.null)                  
-      
diff --git a/Text/ParserCombinators/Parsec/Expr.hs b/Text/ParserCombinators/Parsec/Expr.hs
deleted file mode 100644 (file)
index 8f5d315..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
------------------------------------------------------------------------------
--- |
--- Module      :  Text.ParserCombinators.Parsec.Expr
--- Copyright   :  (c) Daan Leijen 1999-2001
--- License     :  BSD-style (see the file libraries/base/LICENSE)
--- 
--- Maintainer  :  daan@cs.uu.nl
--- Stability   :  provisional
--- Portability :  portable
---
--- A helper module to parse \"expressions\".
--- Builds a parser given a table of operators and associativities.
--- 
------------------------------------------------------------------------------
-
-module Text.ParserCombinators.Parsec.Expr
-                 ( Assoc(..), Operator(..), OperatorTable
-                 , buildExpressionParser
-                 ) where
-
-import Text.ParserCombinators.Parsec.Prim
-import Text.ParserCombinators.Parsec.Combinator
-
-
------------------------------------------------------------
--- Assoc and OperatorTable
------------------------------------------------------------
-data Assoc                = AssocNone 
-                          | AssocLeft
-                          | AssocRight
-                        
-data Operator t st a      = Infix (GenParser t st (a -> a -> a)) Assoc
-                          | Prefix (GenParser t st (a -> a))
-                          | Postfix (GenParser t st (a -> a))
-
-type OperatorTable t st a = [[Operator t st a]]
-
-
-
------------------------------------------------------------
--- Convert an OperatorTable and basic term parser into
--- a full fledged expression parser
------------------------------------------------------------
-buildExpressionParser :: OperatorTable tok st a -> GenParser tok st a -> GenParser tok st a
-buildExpressionParser operators simpleExpr
-    = foldl (makeParser) simpleExpr operators
-    where
-      makeParser term ops
-        = let (rassoc,lassoc,nassoc
-               ,prefix,postfix)      = foldr splitOp ([],[],[],[],[]) ops
-              
-              rassocOp   = choice rassoc
-              lassocOp   = choice lassoc
-              nassocOp   = choice nassoc
-              prefixOp   = choice prefix  <?> ""
-              postfixOp  = choice postfix <?> ""
-              
-              ambigious assoc op= try $
-                                  do{ op; fail ("ambiguous use of a " ++ assoc 
-                                                 ++ " associative operator")
-                                    }
-              
-              ambigiousRight    = ambigious "right" rassocOp
-              ambigiousLeft     = ambigious "left" lassocOp
-              ambigiousNon      = ambigious "non" nassocOp 
-              
-              termP      = do{ pre  <- prefixP
-                             ; x    <- term     
-                             ; post <- postfixP
-                             ; return (post (pre x))
-                             }
-              
-              postfixP   = postfixOp <|> return id
-              
-              prefixP    = prefixOp <|> return id
-                                         
-              rassocP x  = do{ f <- rassocOp
-                             ; y  <- do{ z <- termP; rassocP1 z }
-                             ; return (f x y)
-                             }
-                           <|> ambigiousLeft
-                           <|> ambigiousNon
-                           -- <|> return x
-                           
-              rassocP1 x = rassocP x  <|> return x                           
-                           
-              lassocP x  = do{ f <- lassocOp
-                             ; y <- termP
-                             ; lassocP1 (f x y)
-                             }
-                           <|> ambigiousRight
-                           <|> ambigiousNon
-                           -- <|> return x
-                           
-              lassocP1 x = lassocP x <|> return x                           
-                           
-              nassocP x  = do{ f <- nassocOp
-                             ; y <- termP
-                             ;    ambigiousRight
-                              <|> ambigiousLeft
-                              <|> ambigiousNon
-                              <|> return (f x y)
-                             }                                                          
-                           -- <|> return x                                                      
-                           
-           in  do{ x <- termP
-                 ; rassocP x <|> lassocP  x <|> nassocP x <|> return x
-                   <?> "operator"
-                 }
-                
-
-      splitOp (Infix op assoc) (rassoc,lassoc,nassoc,prefix,postfix)
-        = case assoc of
-            AssocNone  -> (rassoc,lassoc,op:nassoc,prefix,postfix)
-            AssocLeft  -> (rassoc,op:lassoc,nassoc,prefix,postfix)
-            AssocRight -> (op:rassoc,lassoc,nassoc,prefix,postfix)
-            
-      splitOp (Prefix op) (rassoc,lassoc,nassoc,prefix,postfix)
-        = (rassoc,lassoc,nassoc,op:prefix,postfix)
-        
-      splitOp (Postfix op) (rassoc,lassoc,nassoc,prefix,postfix)
-        = (rassoc,lassoc,nassoc,prefix,op:postfix)
-      
diff --git a/Text/ParserCombinators/Parsec/Language.hs b/Text/ParserCombinators/Parsec/Language.hs
deleted file mode 100644 (file)
index 838a348..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
------------------------------------------------------------------------------
--- |
--- Module      :  Text.ParserCombinators.Parsec.Language
--- Copyright   :  (c) Daan Leijen 1999-2001
--- License     :  BSD-style (see the file libraries/base/LICENSE)
--- 
--- Maintainer  :  daan@cs.uu.nl
--- Stability   :  provisional
--- Portability :  non-portable (uses non-portable module Text.ParserCombinators.Parsec.Token)
---
--- A helper module that defines some language definitions that can be used
--- to instantiate a token parser (see "Text.ParserCombinators.Parsec.Token").
--- 
------------------------------------------------------------------------------
-
-module Text.ParserCombinators.Parsec.Language
-                     ( haskellDef, haskell
-                     , mondrianDef, mondrian
-                   
-                     , emptyDef
-                     , haskellStyle
-                     , javaStyle   
-                     , LanguageDef (..)                
-                     ) where
-import Text.ParserCombinators.Parsec
-import Text.ParserCombinators.Parsec.Token 
-
-           
------------------------------------------------------------
--- Styles: haskellStyle, javaStyle
------------------------------------------------------------               
-haskellStyle= emptyDef                      
-                { commentStart   = "{-"
-                , commentEnd     = "-}"
-                , commentLine    = "--"
-                , nestedComments = True
-                , identStart     = letter
-                , identLetter   = alphaNum <|> oneOf "_'"
-                , opStart       = opLetter haskellStyle
-                , opLetter      = oneOf ":!#$%&*+./<=>?@\\^|-~"              
-                , reservedOpNames= []
-                , reservedNames  = []
-                , caseSensitive  = True                                   
-                }         
-                           
-javaStyle   = emptyDef
-               { commentStart   = "/*"
-               , commentEnd     = "*/"
-               , commentLine    = "//"
-               , nestedComments = True
-               , identStart     = letter
-               , identLetter    = alphaNum <|> oneOf "_'"              
-               , reservedNames  = []
-               , reservedOpNames= []   
-                , caseSensitive  = False                                 
-               }
-
------------------------------------------------------------
--- minimal language definition
------------------------------------------------------------                
-emptyDef    = LanguageDef 
-               { commentStart   = ""
-               , commentEnd     = ""
-               , commentLine    = ""
-               , nestedComments = True
-               , identStart     = letter <|> char '_'
-               , identLetter    = alphaNum <|> oneOf "_'"
-               , opStart        = opLetter emptyDef
-               , opLetter       = oneOf ":!#$%&*+./<=>?@\\^|-~"
-               , reservedOpNames= []
-               , reservedNames  = []
-               , caseSensitive  = True
-               }
-                
-
-
------------------------------------------------------------
--- Haskell
------------------------------------------------------------               
-haskell :: TokenParser st
-haskell      = makeTokenParser haskellDef
-
-haskellDef   = haskell98Def
-               { identLetter    = identLetter haskell98Def <|> char '#'
-               , reservedNames  = reservedNames haskell98Def ++ 
-                                  ["foreign","import","export","primitive"
-                                  ,"_ccall_","_casm_"
-                                  ,"forall"
-                                  ]
-                }
-                           
-haskell98Def = haskellStyle
-                { reservedOpNames= ["::","..","=","\\","|","<-","->","@","~","=>"]
-                , reservedNames  = ["let","in","case","of","if","then","else",
-                                    "data","type",
-                                    "class","default","deriving","do","import",
-                                    "infix","infixl","infixr","instance","module",
-                                    "newtype","where",
-                                    "primitive"
-                                    -- "as","qualified","hiding"
-                                   ]
-                }         
-                
-                
------------------------------------------------------------
--- Mondrian
------------------------------------------------------------               
-mondrian :: TokenParser st
-mondrian    = makeTokenParser mondrianDef
-
-mondrianDef = javaStyle
-               { reservedNames = [ "case", "class", "default", "extends"
-                                 , "import", "in", "let", "new", "of", "package"
-                                 ]     
-                , caseSensitive  = True                                  
-               }
-
-                               
diff --git a/Text/ParserCombinators/Parsec/Perm.hs b/Text/ParserCombinators/Parsec/Perm.hs
deleted file mode 100644 (file)
index cbdbfe0..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
------------------------------------------------------------------------------
--- |
--- Module      :  Text.ParserCombinators.Parsec.Perm
--- Copyright   :  (c) Daan Leijen 1999-2001
--- License     :  BSD-style (see the file libraries/base/LICENSE)
--- 
--- Maintainer  :  daan@cs.uu.nl
--- Stability   :  provisional
--- Portability :  non-portable (uses existentially quantified data constructors)
---
--- This module implements permutation parsers. The algorithm used
--- is fairly complex since we push the type system to its limits :-)
--- The algorithm is described in:
---
--- /Parsing Permutation Phrases,/
--- by Arthur Baars, Andres Loh and Doaitse Swierstra.
--- Published as a functional pearl at the Haskell Workshop 2001.
--- 
------------------------------------------------------------------------------
-
-module Text.ParserCombinators.Parsec.Perm
-                  ( PermParser  -- abstract
-
-                  , permute
-                  , (<||>), (<$$>)
-                  , (<|?>), (<$?>)
-                  ) where
-
-import Text.ParserCombinators.Parsec
-
-{---------------------------------------------------------------
-
----------------------------------------------------------------}
-infixl 1 <||>, <|?>
-infixl 2 <$$>, <$?>
-
-
-{---------------------------------------------------------------
-  test -- parse a permutation of 
-  * an optional string of 'a's
-  * a required 'b'
-  * an optional 'c'
----------------------------------------------------------------}
-test input
-  = parse (do{ x <- ptest; eof; return x }) "" input
-
-ptest :: Parser (String,Char,Char)
-ptest  
-  = permute $
-    (,,) <$?> ("",many1 (char 'a'))
-         <||> char 'b' 
-         <|?> ('_',char 'c')
-
-
-{---------------------------------------------------------------
-  Building a permutation parser
----------------------------------------------------------------}
-(<||>) :: PermParser tok st (a -> b) -> GenParser tok st a -> PermParser tok st b
-(<||>) perm p     = add perm p                  
-(<$$>) f p        = newperm f <||> p
-
-(<|?>) perm (x,p) = addopt perm x p
-(<$?>) f (x,p)    = newperm f <|?> (x,p)
-
-
-
-{---------------------------------------------------------------
-  The permutation tree
----------------------------------------------------------------}
-data PermParser tok st a = Perm (Maybe a) [Branch tok st a]
-data Branch tok st a     = forall b. Branch (PermParser tok st (b -> a)) (GenParser tok st b)
-
-
--- transform a permutation tree into a normal parser
-permute :: PermParser tok st a -> GenParser tok st a
-permute (Perm def xs)
-  = choice (map branch xs ++ empty)
-  where
-    empty
-      = case def of
-          Nothing -> []
-          Just x  -> [return x]
-
-    branch (Branch perm p)
-      = do{ x <- p
-          ; f <- permute perm
-          ; return (f x)
-          }
-
--- build permutation trees
-newperm :: (a -> b) -> PermParser tok st (a -> b)
-newperm f
-  = Perm (Just f) []
-
-add :: PermParser tok st (a -> b) -> GenParser tok st a -> PermParser tok st b
-add perm@(Perm mf fs) p
-  = Perm Nothing (first:map insert fs)
-  where
-    first   = Branch perm p
-    insert (Branch perm' p')
-            = Branch (add (mapPerms flip perm') p) p'
-
-addopt :: PermParser tok st (a -> b) -> a -> GenParser tok st a -> PermParser tok st b
-addopt perm@(Perm mf fs) x p
-  = Perm (fmap ($ x) mf) (first:map insert fs)
-  where
-    first   = Branch perm p
-    insert (Branch perm' p')
-            = Branch (addopt (mapPerms flip perm') x p) p'
-
-
-mapPerms :: (a -> b) -> PermParser tok st a -> PermParser tok st b
-mapPerms f (Perm x xs)
-  = Perm (fmap f x) (map (mapBranch f) xs)
-  where
-    mapBranch f (Branch perm p)
-      = Branch (mapPerms (f.) perm) p
diff --git a/Text/ParserCombinators/Parsec/Pos.hs b/Text/ParserCombinators/Parsec/Pos.hs
deleted file mode 100644 (file)
index 31391ad..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
------------------------------------------------------------------------------
--- |
--- Module      :  Text.ParserCombinators.Parsec.Pos
--- Copyright   :  (c) Daan Leijen 1999-2001
--- License     :  BSD-style (see the file libraries/base/LICENSE)
--- 
--- Maintainer  :  daan@cs.uu.nl
--- Stability   :  provisional
--- Portability :  portable
---
--- Textual source positions.
--- 
------------------------------------------------------------------------------
-
-module Text.ParserCombinators.Parsec.Pos
-                  ( SourceName, Line, Column                 
-                  , SourcePos
-                  , sourceLine, sourceColumn, sourceName
-                  , incSourceLine, incSourceColumn
-                  , setSourceLine, setSourceColumn, setSourceName
-                  , newPos, initialPos
-                  , updatePosChar, updatePosString
-                  ) where
-
------------------------------------------------------------
--- Source Positions, a file name, a line and a column.
--- upper left is (1,1)
------------------------------------------------------------                         
-type SourceName     = String
-type Line           = Int
-type Column         = Int
-
-data SourcePos      = SourcePos SourceName !Line !Column
-                    deriving (Eq,Ord)
-               
-
-newPos :: SourceName -> Line -> Column -> SourcePos
-newPos sourceName line column
-    = SourcePos sourceName line column
-
-initialPos sourceName
-    = newPos sourceName 1 1
-
-sourceName   (SourcePos name line column)   = name    
-sourceLine   (SourcePos name line column)   = line    
-sourceColumn (SourcePos name line column)   = column
-
-incSourceLine   (SourcePos name line column) n    = SourcePos name (line+n) column
-incSourceColumn (SourcePos name line column) n    = SourcePos name line (column+n)
-
-setSourceName   (SourcePos name line column) n    = SourcePos n line column
-setSourceLine   (SourcePos name line column) n    = SourcePos name n column
-setSourceColumn (SourcePos name line column) n    = SourcePos name line n
-
------------------------------------------------------------
--- Update source positions on characters
------------------------------------------------------------                         
-updatePosString :: SourcePos -> String -> SourcePos
-updatePosString pos string
-    = forcePos (foldl updatePosChar pos string)
-
-updatePosChar   :: SourcePos -> Char -> SourcePos
-updatePosChar pos@(SourcePos name line column) c   
-    = forcePos $
-      case c of
-        '\n' -> SourcePos name (line+1) 1
-        '\r' -> SourcePos name (line+1) 1
-        '\t' -> SourcePos name line (column + 8 - ((column-1) `mod` 8))
-        _    -> SourcePos name line (column + 1)
-        
-
-forcePos :: SourcePos -> SourcePos      
-forcePos pos@(SourcePos name line column)
-    = seq line (seq column (pos))
-
------------------------------------------------------------
--- Show positions 
------------------------------------------------------------                                                 
-instance Show SourcePos where
-  show (SourcePos name line column)
-    | null name = showLineColumn
-    | otherwise = "\"" ++ name ++ "\" " ++ showLineColumn
-    where
-      showLineColumn    = "(line " ++ show line ++
-                          ", column " ++ show column ++
-                          ")" 
diff --git a/Text/ParserCombinators/Parsec/Prim.hs b/Text/ParserCombinators/Parsec/Prim.hs
deleted file mode 100644 (file)
index 4889717..0000000
+++ /dev/null
@@ -1,430 +0,0 @@
------------------------------------------------------------------------------
--- |
--- Module      :  Text.ParserCombinators.Parsec.Prim
--- Copyright   :  (c) Daan Leijen 1999-2001
--- License     :  BSD-style (see the file libraries/base/LICENSE)
--- 
--- Maintainer  :  daan@cs.uu.nl
--- Stability   :  provisional
--- Portability :  portable
---
--- The primitive parser combinators.
--- 
------------------------------------------------------------------------------
-
-module Text.ParserCombinators.Parsec.Prim
-                   ( -- operators: label a parser, alternative
-                     (<?>), (<|>)
-
-                   -- basic types
-                   , Parser, GenParser
-                   , runParser, parse, parseFromFile, parseTest
-                   
-                   -- primitive parsers:
-                   -- instance Functor Parser     : fmap
-                   -- instance Monad Parser       : return, >>=, fail
-                   -- instance MonadPlus Parser   : mzero (pzero), mplus (<|>)
-                   , token, tokens, tokenPrim
-                   , try, label, labels, unexpected, pzero
-
-                   -- primitive because of space behaviour
-                   , many, skipMany
-                                
-                   -- user state manipulation
-                   , getState, setState, updateState
-
-                   -- state manipulation
-                   , getPosition, setPosition
-                   , getInput, setInput                   
-                   , getParserState, setParserState 
-                 ) where
-
-import Prelude
-import Text.ParserCombinators.Parsec.Pos
-import Text.ParserCombinators.Parsec.Error
-import Control.Monad
-
-{-# INLINE parsecMap    #-}
-{-# INLINE parsecReturn #-}
-{-# INLINE parsecBind   #-}
-{-# INLINE parsecZero   #-}
-{-# INLINE parsecPlus   #-}
-{-# INLINE token        #-}
-{-# INLINE tokenPrim    #-}
-
------------------------------------------------------------
--- Operators:
--- <?>  gives a name to a parser (which is used in error messages)
--- <|>  is the choice operator
------------------------------------------------------------
-infix  0 <?>
-infixr 1 <|>
-
-(<?>) :: GenParser tok st a -> String -> GenParser tok st a
-p <?> msg           = label p msg
-
-(<|>) :: GenParser tok st a -> GenParser tok st a -> GenParser tok st a
-p1 <|> p2           = mplus p1 p2
-
-
------------------------------------------------------------
--- User state combinators
------------------------------------------------------------
-getState :: GenParser tok st st
-getState        = do{ state <- getParserState
-                    ; return (stateUser state)
-                    }
-
-setState :: st -> GenParser tok st ()
-setState st     = do{ updateParserState (\(State input pos _) -> State input pos st)
-                    ; return ()
-                    }
-
-updateState :: (st -> st) -> GenParser tok st ()
-updateState f   = do{ updateParserState (\(State input pos user) -> State input pos (f user))
-                    ; return ()
-                    }
-
-
------------------------------------------------------------
--- Parser state combinators
------------------------------------------------------------
-getPosition :: GenParser tok st SourcePos
-getPosition         = do{ state <- getParserState; return (statePos state) }
-
-getInput :: GenParser tok st [tok]
-getInput            = do{ state <- getParserState; return (stateInput state) }
-
-
-setPosition :: SourcePos -> GenParser tok st ()
-setPosition pos     = do{ updateParserState (\(State input _ user) -> State input pos user)
-                        ; return ()
-                        }
-                        
-setInput :: [tok] -> GenParser tok st ()
-setInput input      = do{ updateParserState (\(State _ pos user) -> State input pos user)
-                        ; return ()
-                        }
-
-getParserState     :: GenParser tok st (State tok st)
-getParserState      =  updateParserState id    
-
-setParserState     :: State tok st -> GenParser tok st (State tok st)
-setParserState st   = updateParserState (const st)
-
-
-
-
------------------------------------------------------------
--- Parser definition.
--- GenParser tok st a:
---  General parser for tokens of type "tok", 
---  a user state "st" and a result type "a"
------------------------------------------------------------
-type Parser a           = GenParser Char () a
-
-newtype GenParser tok st a = Parser (State tok st -> Consumed (Reply tok st a))
-runP (Parser p)            = p
-
-data Consumed a         = Consumed a                --input is consumed
-                        | Empty !a                  --no input is consumed
-                    
-data Reply tok st a     = Ok a (State tok st) ParseError      --parsing succeeded with "a"
-                        | Error ParseError                    --parsing failed
-
-data State tok st       = State { stateInput :: [tok]
-                                , statePos   :: SourcePos
-                                , stateUser  :: !st
-                                }
-
-
------------------------------------------------------------
--- run a parser
------------------------------------------------------------
-parseFromFile :: Parser a -> SourceName -> IO (Either ParseError a)
-parseFromFile p fname
-    = do{ input <- readFile fname
-        ; return (parse p fname input)
-        }
-
-parseTest :: Show a => GenParser tok () a -> [tok] -> IO ()
-parseTest p input
-    = case (runParser p () "" input) of
-        Left err -> do{ putStr "parse error at "
-                      ; print err
-                      }
-        Right x  -> print x
-
-
-parse :: GenParser tok () a -> SourceName -> [tok] -> Either ParseError a
-parse p name input
-    = runParser p () name input
-
-
-runParser :: GenParser tok st a -> st -> SourceName -> [tok] -> Either ParseError a
-runParser p st name input
-    = case parserReply (runP p (State input (initialPos name) st)) of
-        Ok x _ _    -> Right x
-        Error err   -> Left err
-
-parserReply result     
-    = case result of
-        Consumed reply -> reply
-        Empty reply    -> reply
-
-
------------------------------------------------------------
--- Functor: fmap
------------------------------------------------------------
-instance Functor (GenParser tok st) where
-  fmap f p  = parsecMap f p
-
-parsecMap :: (a -> b) -> GenParser tok st a -> GenParser tok st b
-parsecMap f (Parser p)
-    = Parser (\state -> 
-        case (p state) of
-          Consumed reply -> Consumed (mapReply reply)
-          Empty    reply -> Empty    (mapReply reply)
-      )
-    where
-      mapReply reply
-        = case reply of
-            Ok x state err -> let fx = f x 
-                              in seq fx (Ok fx state err)
-            Error err      -> Error err
-           
-
------------------------------------------------------------
--- Monad: return, sequence (>>=) and fail
------------------------------------------------------------    
-instance Monad (GenParser tok st) where
-  return x   = parsecReturn x  
-  p >>= f    = parsecBind p f
-  fail msg   = parsecFail msg
-
-parsecReturn :: a -> GenParser tok st a
-parsecReturn x
-  = Parser (\state -> Empty (Ok x state (unknownError state)))   
-
-parsecBind :: GenParser tok st a -> (a -> GenParser tok st b) -> GenParser tok st b
-parsecBind (Parser p) f
-    = Parser (\state ->
-        case (p state) of                 
-          Consumed reply1 
-            -> Consumed $
-               case (reply1) of
-                 Ok x state1 err1 -> case runP (f x) state1 of
-                                       Empty reply2    -> mergeErrorReply err1 reply2
-                                       Consumed reply2 -> reply2
-                 Error err1       -> Error err1
-
-          Empty reply1    
-            -> case (reply1) of
-                 Ok x state1 err1 -> case runP (f x) state1 of
-                                       Empty reply2 -> Empty (mergeErrorReply err1 reply2)
-                                       other        -> other                                                    
-                 Error err1       -> Empty (Error err1)
-      )                                                              
-
-mergeErrorReply err1 reply
-  = case reply of
-      Ok x state err2 -> Ok x state (mergeError err1 err2)
-      Error err2      -> Error (mergeError err1 err2)
-
-
-parsecFail :: String -> GenParser tok st a
-parsecFail msg
-  = Parser (\state -> 
-      Empty (Error (newErrorMessage (Message msg) (statePos state))))
-
-
------------------------------------------------------------
--- MonadPlus: alternative (mplus) and mzero
------------------------------------------------------------
-instance MonadPlus (GenParser tok st) where
-  mzero         = parsecZero
-  mplus p1 p2   = parsecPlus p1 p2
-      
-
-pzero :: GenParser tok st a
-pzero = parsecZero
-
-parsecZero :: GenParser tok st a
-parsecZero
-    = Parser (\state -> Empty (Error (unknownError state)))
-
-parsecPlus :: GenParser tok st a -> GenParser tok st a -> GenParser tok st a
-parsecPlus (Parser p1) (Parser p2)
-    = Parser (\state ->
-        case (p1 state) of        
-          Empty (Error err) -> case (p2 state) of
-                                 Empty reply -> Empty (mergeErrorReply err reply)
-                                 consumed    -> consumed
-          other             -> other
-      )
-
-
-{- 
--- variant that favors a consumed reply over an empty one, even it is not the first alternative.
-          empty@(Empty reply) -> case reply of
-                                   Error err ->
-                                     case (p2 state) of
-                                       Empty reply -> Empty (mergeErrorReply err reply)
-                                       consumed    -> consumed
-                                   ok ->
-                                     case (p2 state) of
-                                       Empty reply -> empty
-                                       consumed    -> consumed
-          consumed  -> consumed
--}
-
-
------------------------------------------------------------
--- Primitive Parsers: 
---  try, token(Prim), label, unexpected and updateState
------------------------------------------------------------
-try :: GenParser tok st a -> GenParser tok st a
-try (Parser p)
-    = Parser (\state@(State input pos user) ->     
-        case (p state) of
-          Consumed (Error err)  -> Empty (Error (setErrorPos pos err))
-          Consumed ok           -> Consumed ok    -- was: Empty ok
-          empty                 -> empty
-      )
-
-     
-token :: (tok -> String) -> (tok -> SourcePos) -> (tok -> Maybe a) -> GenParser tok st a    
-token show tokpos test
-  = tokenPrim show nextpos test
-  where
-    nextpos _ _   (tok:toks)  = tokpos tok
-    nextpos _ tok []          = tokpos tok
-
-tokenPrim :: (tok -> String) -> (SourcePos -> tok -> [tok] -> SourcePos) -> (tok -> Maybe a) -> GenParser tok st a
-tokenPrim show nextpos test
-    = Parser (\state@(State input pos user) -> 
-        case input of
-          (c:cs) -> case test c of
-                      Just x  -> let newpos   = nextpos pos c cs
-                                     newstate = State cs newpos user
-                                 in seq newpos $ seq newstate $ 
-                                    Consumed (Ok x newstate (newErrorUnknown newpos))
-                      Nothing -> Empty (sysUnExpectError (show c) pos)
-          []     -> Empty (sysUnExpectError "" pos)
-      )
-
-
-label :: GenParser tok st a -> String -> GenParser tok st a    
-label p msg
-  = labels p [msg]
-
-labels :: GenParser tok st a -> [String] -> GenParser tok st a
-labels (Parser p) msgs
-    = Parser (\state -> 
-        case (p state) of
-          Empty reply -> Empty $ 
-                         case (reply) of
-                           Error err        -> Error (setExpectErrors err msgs)
-                           Ok x state1 err  | errorIsUnknown err -> reply
-                                            | otherwise -> Ok x state1 (setExpectErrors err msgs)
-          other       -> other
-      )
-
-
-updateParserState :: (State tok st -> State tok st) -> GenParser tok st (State tok st)
-updateParserState f 
-    = Parser (\state -> let newstate = f state
-                        in seq newstate $
-                           Empty (Ok state newstate (unknownError newstate)))
-    
-    
-unexpected :: String -> GenParser tok st a
-unexpected msg
-    = Parser (\state -> Empty (Error (newErrorMessage (UnExpect msg) (statePos state))))
-    
-
-setExpectErrors err []         = setErrorMessage (Expect "") err
-setExpectErrors err [msg]      = setErrorMessage (Expect msg) err
-setExpectErrors err (msg:msgs) = foldr (\msg err -> addErrorMessage (Expect msg) err) 
-                                       (setErrorMessage (Expect msg) err) msgs
-
-sysUnExpectError msg pos  = Error (newErrorMessage (SysUnExpect msg) pos)
-unknownError state        = newErrorUnknown (statePos state)
-
------------------------------------------------------------
--- Parsers unfolded for space:
--- if many and skipMany are not defined as primitives,
--- they will overflow the stack on large inputs
------------------------------------------------------------    
-many :: GenParser tok st a -> GenParser tok st [a]
-many p
-  = do{ xs <- manyAccum (:) p
-      ; return (reverse xs)
-      }
-
-skipMany :: GenParser tok st a -> GenParser tok st ()
-skipMany p
-  = do{ manyAccum (\x xs -> []) p
-      ; return ()
-      }
-
-manyAccum :: (a -> [a] -> [a]) -> GenParser tok st a -> GenParser tok st [a]
-manyAccum accum (Parser p)
-  = Parser (\state -> 
-    let walk xs state r = case r of
-                           Empty (Error err)          -> Ok xs state err
-                           Empty ok                   -> error "Text.ParserCombinators.Parsec.Prim.many: combinator 'many' is applied to a parser that accepts an empty string."
-                           Consumed (Error err)       -> Error err
-                           Consumed (Ok x state' err) -> let ys = accum x xs
-                                                         in seq ys (walk ys state' (p state'))
-    in case (p state) of
-         Empty reply  -> case reply of
-                           Ok x state' err -> error "Text.ParserCombinators.Parsec.Prim.many: combinator 'many' is applied to a parser that accepts an empty string."
-                           Error err       -> Empty (Ok [] state err)
-         consumed     -> Consumed $ walk [] state consumed)
-
-
-
------------------------------------------------------------
--- Parsers unfolded for speed: 
---  tokens
------------------------------------------------------------    
-
-{- specification of @tokens@:
-tokens showss nextposs s
-  = scan s
-  where
-    scan []       = return s
-    scan (c:cs)   = do{ token show nextpos c <?> shows s; scan cs }                      
-
-    show c        = shows [c]
-    nextpos pos c = nextposs pos [c]
--}
-
-tokens :: Eq tok => ([tok] -> String) -> (SourcePos -> [tok] -> SourcePos) -> [tok] -> GenParser tok st [tok]
-tokens shows nextposs s
-    = Parser (\state@(State input pos user) -> 
-       let
-        ok cs             = let newpos   = nextposs pos s
-                                newstate = State cs newpos user
-                            in seq newpos $ seq newstate $ 
-                               (Ok s newstate (newErrorUnknown newpos))
-                               
-        errEof            = Error (setErrorMessage (Expect (shows s))
-                                     (newErrorMessage (SysUnExpect "") pos))
-        errExpect c       = Error (setErrorMessage (Expect (shows s))
-                                     (newErrorMessage (SysUnExpect (shows [c])) pos))
-
-        walk [] cs        = ok cs
-        walk xs []        = errEof
-        walk (x:xs) (c:cs)| x == c        = walk xs cs
-                          | otherwise     = errExpect c
-
-        walk1 [] cs        = Empty (ok cs)
-        walk1 xs []        = Empty (errEof)
-        walk1 (x:xs) (c:cs)| x == c        = Consumed (walk xs cs)
-                           | otherwise     = Empty (errExpect c)
-
-       in walk1 s input)
-
-
diff --git a/Text/ParserCombinators/Parsec/Token.hs b/Text/ParserCombinators/Parsec/Token.hs
deleted file mode 100644 (file)
index 529eac9..0000000
+++ /dev/null
@@ -1,473 +0,0 @@
------------------------------------------------------------------------------
--- |
--- Module      :  Text.ParserCombinators.Parsec.Token
--- Copyright   :  (c) Daan Leijen 1999-2001
--- License     :  BSD-style (see the file libraries/base/LICENSE)
--- 
--- Maintainer  :  daan@cs.uu.nl
--- Stability   :  provisional
--- Portability :  non-portable (uses existentially quantified data constructors)
---
--- A helper module to parse lexical elements (tokens).
--- 
------------------------------------------------------------------------------
-
-module Text.ParserCombinators.Parsec.Token
-                  ( LanguageDef (..)
-                  , TokenParser (..)
-                  , makeTokenParser
-                  ) where
-
-import Data.Char (isAlpha,toLower,toUpper,isSpace,digitToInt)
-import Data.List (nub,sort)
-import Text.ParserCombinators.Parsec
-
-
------------------------------------------------------------
--- Language Definition
------------------------------------------------------------
-data LanguageDef st  
-    = LanguageDef 
-    { commentStart   :: String
-    , commentEnd     :: String
-    , commentLine    :: String
-    , nestedComments :: Bool                  
-    , identStart     :: CharParser st Char
-    , identLetter    :: CharParser st Char
-    , opStart        :: CharParser st Char
-    , opLetter       :: CharParser st Char
-    , reservedNames  :: [String]
-    , reservedOpNames:: [String]
-    , caseSensitive  :: Bool
-    }                           
-           
------------------------------------------------------------
--- A first class module: TokenParser
------------------------------------------------------------
-data TokenParser st
-    = TokenParser{ identifier       :: CharParser st String
-                 , reserved         :: String -> CharParser st ()
-                 , operator         :: CharParser st String
-                 , reservedOp       :: String -> CharParser st ()
-                        
-                 , charLiteral      :: CharParser st Char
-                 , stringLiteral    :: CharParser st String
-                 , natural          :: CharParser st Integer
-                 , integer          :: CharParser st Integer
-                 , float            :: CharParser st Double
-                 , naturalOrFloat   :: CharParser st (Either Integer Double)
-                 , decimal          :: CharParser st Integer
-                 , hexadecimal      :: CharParser st Integer
-                 , octal            :: CharParser st Integer
-            
-                 , symbol           :: String -> CharParser st String
-                 , lexeme           :: forall a. CharParser st a -> CharParser st a
-                 , whiteSpace       :: CharParser st ()     
-             
-                 , parens           :: forall a. CharParser st a -> CharParser st a 
-                 , braces           :: forall a. CharParser st a -> CharParser st a
-                 , angles           :: forall a. CharParser st a -> CharParser st a
-                 , brackets         :: forall a. CharParser st a -> CharParser st a
-                 -- "squares" is deprecated
-                 , squares          :: forall a. CharParser st a -> CharParser st a 
-
-                 , semi             :: CharParser st String
-                 , comma            :: CharParser st String
-                 , colon            :: CharParser st String
-                 , dot              :: CharParser st String
-                 , semiSep          :: forall a . CharParser st a -> CharParser st [a]
-                 , semiSep1         :: forall a . CharParser st a -> CharParser st [a]
-                 , commaSep         :: forall a . CharParser st a -> CharParser st [a]
-                 , commaSep1        :: forall a . CharParser st a -> CharParser st [a]                
-                 }
-
------------------------------------------------------------
--- Given a LanguageDef, create a token parser.
------------------------------------------------------------
-makeTokenParser :: LanguageDef st -> TokenParser st
-makeTokenParser languageDef
-    = TokenParser{ identifier = identifier
-                 , reserved = reserved
-                 , operator = operator
-                 , reservedOp = reservedOp
-                        
-                 , charLiteral = charLiteral
-                 , stringLiteral = stringLiteral
-                 , natural = natural
-                 , integer = integer
-                 , float = float
-                 , naturalOrFloat = naturalOrFloat
-                 , decimal = decimal
-                 , hexadecimal = hexadecimal
-                 , octal = octal
-            
-                 , symbol = symbol
-                 , lexeme = lexeme
-                 , whiteSpace = whiteSpace
-             
-                 , parens = parens
-                 , braces = braces
-                 , angles = angles
-                 , brackets = brackets
-                 , squares = brackets
-                 , semi = semi
-                 , comma = comma
-                 , colon = colon
-                 , dot = dot
-                 , semiSep = semiSep
-                 , semiSep1 = semiSep1
-                 , commaSep = commaSep
-                 , commaSep1 = commaSep1
-                 }
-    where
-     
-    -----------------------------------------------------------
-    -- Bracketing
-    -----------------------------------------------------------
-    parens p        = between (symbol "(") (symbol ")") p
-    braces p        = between (symbol "{") (symbol "}") p
-    angles p        = between (symbol "<") (symbol ">") p
-    brackets p      = between (symbol "[") (symbol "]") p
-
-    semi            = symbol ";" 
-    comma           = symbol ","
-    dot             = symbol "."
-    colon           = symbol ":"
-
-    commaSep p      = sepBy p comma
-    semiSep p       = sepBy p semi
-
-    commaSep1 p     = sepBy1 p comma
-    semiSep1 p      = sepBy1 p semi
-
-
-    -----------------------------------------------------------
-    -- Chars & Strings
-    -----------------------------------------------------------
-    -- charLiteral :: CharParser st Char
-    charLiteral     = lexeme (between (char '\'') 
-                                      (char '\'' <?> "end of character")
-                                      characterChar )
-                    <?> "character"
-
-    characterChar   = charLetter <|> charEscape 
-                    <?> "literal character"
-
-    charEscape      = do{ char '\\'; escapeCode }
-    charLetter      = satisfy (\c -> (c /= '\'') && (c /= '\\') && (c > '\026'))
-
-
-
-    -- stringLiteral :: CharParser st String
-    stringLiteral   = lexeme (
-                      do{ str <- between (char '"')                   
-                                         (char '"' <?> "end of string")
-                                         (many stringChar) 
-                        ; return (foldr (maybe id (:)) "" str)
-                        }
-                      <?> "literal string")
-
-    -- stringChar :: CharParser st (Maybe Char)
-    stringChar      =   do{ c <- stringLetter; return (Just c) }
-                    <|> stringEscape 
-                    <?> "string character"
-                
-    stringLetter    = satisfy (\c -> (c /= '"') && (c /= '\\') && (c > '\026'))
-
-    stringEscape    = do{ char '\\'
-                        ;     do{ escapeGap  ; return Nothing }
-                          <|> do{ escapeEmpty; return Nothing }
-                          <|> do{ esc <- escapeCode; return (Just esc) }
-                        }
-                        
-    escapeEmpty     = char '&'
-    escapeGap       = do{ many1 space
-                        ; char '\\' <?> "end of string gap"
-                        }
-                        
-                        
-                        
-    -- escape codes
-    escapeCode      = charEsc <|> charNum <|> charAscii <|> charControl
-                    <?> "escape code"
-
-    -- charControl :: CharParser st Char
-    charControl     = do{ char '^'
-                        ; code <- upper
-                        ; return (toEnum (fromEnum code - fromEnum 'A'))
-                        }
-
-    -- charNum :: CharParser st Char                    
-    charNum         = do{ code <- decimal 
-                                  <|> do{ char 'o'; number 8 octDigit }
-                                  <|> do{ char 'x'; number 16 hexDigit }
-                        ; return (toEnum (fromInteger code))
-                        }
-
-    charEsc         = choice (map parseEsc escMap)
-                    where
-                      parseEsc (c,code)     = do{ char c; return code }
-                      
-    charAscii       = choice (map parseAscii asciiMap)
-                    where
-                      parseAscii (asc,code) = try (do{ string asc; return code })
-
-
-    -- escape code tables
-    escMap          = zip ("abfnrtv\\\"\'") ("\a\b\f\n\r\t\v\\\"\'")
-    asciiMap        = zip (ascii3codes ++ ascii2codes) (ascii3 ++ ascii2) 
-
-    ascii2codes     = ["BS","HT","LF","VT","FF","CR","SO","SI","EM",
-                       "FS","GS","RS","US","SP"]
-    ascii3codes     = ["NUL","SOH","STX","ETX","EOT","ENQ","ACK","BEL",
-                       "DLE","DC1","DC2","DC3","DC4","NAK","SYN","ETB",
-                       "CAN","SUB","ESC","DEL"]
-
-    ascii2          = ['\BS','\HT','\LF','\VT','\FF','\CR','\SO','\SI',
-                       '\EM','\FS','\GS','\RS','\US','\SP']
-    ascii3          = ['\NUL','\SOH','\STX','\ETX','\EOT','\ENQ','\ACK',
-                       '\BEL','\DLE','\DC1','\DC2','\DC3','\DC4','\NAK',
-                       '\SYN','\ETB','\CAN','\SUB','\ESC','\DEL']
-
-
-    -----------------------------------------------------------
-    -- Numbers
-    -----------------------------------------------------------
-    -- naturalOrFloat :: CharParser st (Either Integer Double)
-    naturalOrFloat  = lexeme (natFloat) <?> "number"
-
-    float           = lexeme floating   <?> "float"
-    integer         = lexeme int        <?> "integer"
-    natural         = lexeme nat        <?> "natural"
-
-
-    -- floats
-    floating        = do{ n <- decimal 
-                        ; fractExponent n
-                        }
-
-
-    natFloat        = do{ char '0'
-                        ; zeroNumFloat
-                        }
-                      <|> decimalFloat
-                      
-    zeroNumFloat    =  do{ n <- hexadecimal <|> octal
-                         ; return (Left n)
-                         }
-                    <|> decimalFloat
-                    <|> fractFloat 0
-                    <|> return (Left 0)                  
-                      
-    decimalFloat    = do{ n <- decimal
-                        ; option (Left n) 
-                                 (fractFloat n)
-                        }
-
-    fractFloat n    = do{ f <- fractExponent n
-                        ; return (Right f)
-                        }
-                        
-    fractExponent n = do{ fract <- fraction
-                        ; expo  <- option 1.0 exponent'
-                        ; return ((fromInteger n + fract)*expo)
-                        }
-                    <|>
-                      do{ expo <- exponent'
-                        ; return ((fromInteger n)*expo)
-                        }
-
-    fraction        = do{ char '.'
-                        ; digits <- many1 digit <?> "fraction"
-                        ; return (foldr op 0.0 digits)
-                        }
-                      <?> "fraction"
-                    where
-                      op d f    = (f + fromIntegral (digitToInt d))/10.0
-                        
-    exponent'       = do{ oneOf "eE"
-                        ; f <- sign
-                        ; e <- decimal <?> "exponent"
-                        ; return (power (f e))
-                        }
-                      <?> "exponent"
-                    where
-                       power e  | e < 0      = 1.0/power(-e)
-                                | otherwise  = fromInteger (10^e)
-
-
-    -- integers and naturals
-    int             = do{ f <- lexeme sign
-                        ; n <- nat
-                        ; return (f n)
-                        }
-                        
-    -- sign            :: CharParser st (Integer -> Integer)
-    sign            =   (char '-' >> return negate) 
-                    <|> (char '+' >> return id)     
-                    <|> return id
-
-    nat             = zeroNumber <|> decimal
-        
-    zeroNumber      = do{ char '0'
-                        ; hexadecimal <|> octal <|> decimal <|> return 0
-                        }
-                      <?> ""       
-
-    decimal         = number 10 digit        
-    hexadecimal     = do{ oneOf "xX"; number 16 hexDigit }
-    octal           = do{ oneOf "oO"; number 8 octDigit  }
-
-    -- number :: Integer -> CharParser st Char -> CharParser st Integer
-    number base baseDigit
-        = do{ digits <- many1 baseDigit
-            ; let n = foldl (\x d -> base*x + toInteger (digitToInt d)) 0 digits
-            ; seq n (return n)
-            }          
-
-    -----------------------------------------------------------
-    -- Operators & reserved ops
-    -----------------------------------------------------------
-    reservedOp name =   
-        lexeme $ try $
-        do{ string name
-          ; notFollowedBy (opLetter languageDef) <?> ("end of " ++ show name)
-          }
-
-    operator =
-        lexeme $ try $
-        do{ name <- oper
-          ; if (isReservedOp name)
-             then unexpected ("reserved operator " ++ show name)
-             else return name
-          }
-          
-    oper =
-        do{ c <- (opStart languageDef)
-          ; cs <- many (opLetter languageDef)
-          ; return (c:cs)
-          }
-        <?> "operator"
-        
-    isReservedOp name =
-        isReserved (sort (reservedOpNames languageDef)) name          
-        
-        
-    -----------------------------------------------------------
-    -- Identifiers & Reserved words
-    -----------------------------------------------------------
-    reserved name =
-        lexeme $ try $
-        do{ caseString name
-          ; notFollowedBy (identLetter languageDef) <?> ("end of " ++ show name)
-          }
-
-    caseString name
-        | caseSensitive languageDef  = string name
-        | otherwise               = do{ walk name; return name }
-        where
-          walk []     = return ()
-          walk (c:cs) = do{ caseChar c <?> msg; walk cs }
-          
-          caseChar c  | isAlpha c  = char (toLower c) <|> char (toUpper c)
-                      | otherwise  = char c
-          
-          msg         = show name
-          
-
-    identifier =
-        lexeme $ try $
-        do{ name <- ident
-          ; if (isReservedName name)
-             then unexpected ("reserved word " ++ show name)
-             else return name
-          }
-        
-        
-    ident           
-        = do{ c <- identStart languageDef
-            ; cs <- many (identLetter languageDef)
-            ; return (c:cs)
-            }
-        <?> "identifier"
-
-    isReservedName name
-        = isReserved theReservedNames caseName
-        where
-          caseName      | caseSensitive languageDef  = name
-                        | otherwise               = map toLower name
-
-        
-    isReserved names name    
-        = scan names
-        where
-          scan []       = False
-          scan (r:rs)   = case (compare r name) of
-                            LT  -> scan rs
-                            EQ  -> True
-                            GT  -> False
-
-    theReservedNames
-        | caseSensitive languageDef  = sortedNames
-        | otherwise               = map (map toLower) sortedNames
-        where
-          sortedNames   = sort (reservedNames languageDef)
-                                 
-
-
-    -----------------------------------------------------------
-    -- White space & symbols
-    -----------------------------------------------------------
-    symbol name
-        = lexeme (string name)
-
-    lexeme p       
-        = do{ x <- p; whiteSpace; return x  }
-      
-      
-    --whiteSpace    
-    whiteSpace 
-        | noLine && noMulti  = skipMany (simpleSpace <?> "")
-        | noLine             = skipMany (simpleSpace <|> multiLineComment <?> "")
-        | noMulti            = skipMany (simpleSpace <|> oneLineComment <?> "")
-        | otherwise          = skipMany (simpleSpace <|> oneLineComment <|> multiLineComment <?> "")
-        where
-          noLine  = null (commentLine languageDef)
-          noMulti = null (commentStart languageDef)   
-          
-          
-    simpleSpace =
-        skipMany1 (satisfy isSpace)    
-        
-    oneLineComment =
-        do{ try (string (commentLine languageDef))
-          ; skipMany (satisfy (/= '\n'))
-          ; return ()
-          }
-
-    multiLineComment =
-        do { try (string (commentStart languageDef))
-           ; inComment
-           }
-
-    inComment 
-        | nestedComments languageDef  = inCommentMulti
-        | otherwise                = inCommentSingle
-        
-    inCommentMulti 
-        =   do{ try (string (commentEnd languageDef)) ; return () }
-        <|> do{ multiLineComment                     ; inCommentMulti }
-        <|> do{ skipMany1 (noneOf startEnd)          ; inCommentMulti }
-        <|> do{ oneOf startEnd                       ; inCommentMulti }
-        <?> "end of comment"  
-        where
-          startEnd   = nub (commentEnd languageDef ++ commentStart languageDef)
-
-    inCommentSingle
-        =   do{ try (string (commentEnd languageDef)); return () }
-        <|> do{ skipMany1 (noneOf startEnd)         ; inCommentSingle }
-        <|> do{ oneOf startEnd                      ; inCommentSingle }
-        <?> "end of comment"
-        where
-          startEnd   = nub (commentEnd languageDef ++ commentStart languageDef)
-
diff --git a/Text/ParserCombinators/Parsec/examples/Henk/HenkAS.hs b/Text/ParserCombinators/Parsec/examples/Henk/HenkAS.hs
deleted file mode 100644 (file)
index 9c62dd0..0000000
+++ /dev/null
@@ -1,151 +0,0 @@
-----------------------------------------------------------------
--- the Henk Abstract Syntax
--- Copyright 2000, Jan-Willem Roorda and Daan Leijen
-----------------------------------------------------------------
-module HenkAS where
-
-import Pretty
-
-----------------------------------------------------------------
--- Abstract Syntax 
-----------------------------------------------------------------
-data Program        = Program [TypeDecl] [ValueDecl]
-                    
-data TypeDecl       = Data Var [Var]
-                    
-data ValueDecl      = Let Bind
-                    | LetRec [Bind]
-                    
-data Bind           = Bind Var Expr
-                    
-data Expr           = Var Var
-                    | Lit Lit
-                    | Box
-                    | Star
-                    | Unknown
-                    
-                    | App Expr Expr          
-                    | Case Expr [Alt] [Expr]
-                    | In ValueDecl Expr
-                    | Pi Var Expr
-                    | Lam Var Expr
-                    
-data Alt            = Alt Pat Expr
-
-data Pat            = PatVar Var
-                    | PatLit Lit
-
-data Var            = TVar Identifier Expr
-
-data Lit            = LitInt Integer
-
-type Identifier     = String    
-
-anonymous           = "_"
-isAnonymous s       = (null s || (head s == head anonymous))
-
-
-----------------------------------------------------------------
--- pretty print abstract syntax
-----------------------------------------------------------------
-instance Show Program where
-  showsPrec d program   = shows (pprogram program)
-
-vsep ds
-    = vcat (map ($$ text "") ds)    
-
-
--- program
-pprogram (Program tdecls vdecls)
-    = vsep ((map ptdecl tdecls) ++ (map pvdecl vdecls))
-    
-ptdecl (Data v vs)
-    = (text "data" <+> pbindvar v)
-      $$ indent (text "=" <+> braced (map ptvar vs))
-  
-    
-pvdecl vdecl
-    = case vdecl of
-        Let bind     -> text "let" <+> pbind bind
-        LetRec binds -> text "letrec" $$ indent (braced (map pbind binds))
-  
-pbind (Bind v e)
-    = pbindvar v $$ indent (text "=" <+> pexpr e)
-  
--- expressions (are parenthesis correct ?)  
-parensExpr e
-    = case e of
-        In _ _      -> parens (pexpr e)
-        Pi _ _      -> parens (pexpr e)
-        Lam _ _     -> parens (pexpr e)
-        Case _ _ _  -> parens (pexpr e)
-        App _ _     -> parens (pexpr e)
-        Var (TVar i t) -> case t of
-                            Unknown -> pexpr e
-                            other   -> parens (pexpr e)
-        other       -> pexpr e
-  
-pexpr e
-    = case e of
-        Var v       -> pboundvar v
-        Lit l       -> plit l
-        Box         -> text "[]"
-        Star        -> text "*"
-        Unknown     -> text "?"
-                        
-        App e1 e2   -> pexpr e1 <+> parensExpr e2
-        Case e as ts-> sep $ [text "case" <+> parensExpr e <+> text "of"
-                             ,nest 3 (braced (map palt as))
-                             ] ++
-                             (if (null as) 
-                               then []
-                               else [text "at"
-                                    ,nest 3 (braced (map pexpr ts))
-                                    ])
-                       
-        In v e      -> sep[ pvdecl v, text "in" <+> pexpr e]        
-        Pi v e      -> case v of
-                         TVar i t    | isAnonymous i -> parensExpr t <+> text "->" <+> pexpr e
-                         TVar i Star -> sep[ text "\\/" <> text i <> text ".", pexpr e]
-                         other       -> sep[ text "|~|" <> pbindvar v <> text ".", pexpr e]
-        Lam v e     -> case v of
-                         TVar i Star -> sep[ text "/\\" <> text i <> text ".", pexpr e]
-                         other       -> sep[ text "\\" <> pbindvar v <> text ".", pexpr e]
-  
-  
--- atomic stuff  
-palt (Alt p e)
-    = ppat p <+> text "=>" <+> pexpr e
-    
-ppat p
-    = case p of PatVar v -> pboundvar v
-                PatLit l -> plit l
-            
-                  
-pboundvar v@(TVar i e)
-    = case e of Unknown  -> text i
-                other    -> ptvar v
-  
-pbindvar v@(TVar i e)
-    = case e of Star     -> text i
-                other    -> ptvar v
-                
-ptvar (TVar i e)
-    = text i <> colon <+> pexpr e
-            
-             
-plit l
-    = case l of LitInt i -> integer i
-    
-braced []
-    = empty
-    
-braced ds
-    = let prefix = map text $ ["{"] ++ repeat ";"
-      in  cat ((zipWith (<+>) prefix ds) ++ [text "}"])
-      
-indent
-    = nest 4
-    
-  
-    
\ No newline at end of file
diff --git a/Text/ParserCombinators/Parsec/examples/Henk/HenkParser.hs b/Text/ParserCombinators/Parsec/examples/Henk/HenkParser.hs
deleted file mode 100644 (file)
index 290cda7..0000000
+++ /dev/null
@@ -1,277 +0,0 @@
-----------------------------------------------------------------
--- the Henk Parser
--- Copyright 2000, Jan-Willem Roorda and Daan Leijen
-----------------------------------------------------------------
-module HenkParser where
-
-import Text.ParserCombinators.Parsec.
-import qualified Text.ParserCombinators.Parsec.Token as P
-import Text.ParserCombinators.Parsec.Expr
-import Text.ParserCombinators.Parsec.Language
-
-import HenkAS
-
-----------------------------------------------------------------
--- the Henk Parser
---
--- anonymous variables are any identifiers starting with "_"
---
--- unknown types (those that need to be inferred) can explicitly
--- be given using "?"
---
--- instead of grammar: "var : aexpr" as in the henk paper,
--- we use "var : expr" instead. This means that variable
--- sequences as in \, |~|, \/ and /\ expressions need to
--- be comma seperated. Pattern variables are also comma
--- seperated. The case arrow (->) now needs to be (=>) in
--- order to distinguish the end of the pattern from function
--- arrows.
-----------------------------------------------------------------
-program
-    = do{ whiteSpace
-        ; ts <- semiSep tdecl
-        ; vs <- semiSep vdecl
-        ; eof
-        ; return $ Program ts vs
-        }
-
-----------------------------------------------------------------
--- Type declarations
-----------------------------------------------------------------
-tdecl
-    = do{ reserved "data"
-        ; t  <- bindVar
-        ; symbol "="
-        ; ts <- braces (semiSep1 tvar)
-        ; return $ Data t ts
-        }
-
-----------------------------------------------------------------
--- Value declarations
-----------------------------------------------------------------
-vdecl :: Parser ValueDecl
-vdecl
-    = do{ reserved "let"
-        ; b <- bind 
-        ; return $ Let b
-        }
-    <|>
-      do{ reserved "letrec"
-        ; bs <- braces (semiSep1 bind)
-        ; return $ LetRec bs
-        }
-
-
-bind
-    = do{ t <- tvar
-        ; symbol "="
-        ; e <- expr
-        ; return $ Bind t e
-        }
-
-----------------------------------------------------------------
--- Expressions
-----------------------------------------------------------------
-expr :: Parser Expr
-expr 
-    = choice 
-      [ letExpr 
-      , forallExpr      -- forall before lambda! \/ vs. \
-      , lambdaExpr
-      , piExpr
-      , caseExpr 
-
-      , functionExpr
-      , bigLamdaExpr
-      ]
-    <?> "expression"
-
-letExpr
-    = do{ vd <- vdecl
-        ; reserved "in"
-        ; e  <- expr
-        ; return (In vd e)
-        }
-
-lambdaExpr
-    = do{ symbol "\\"
-        ; ts <- commaSep1 bindVar
-        ; symbol "."
-        ; e  <- expr
-        ; return $ (foldr Lam e ts)
-        }
-
-piExpr
-    = do{ symbol "|~|"
-        ; ts <- commaSep1 bindVar
-        ; symbol "."
-        ; e  <- expr
-        ; return (foldr Pi e ts)
-        }
-
-----------------------------------------------------------------
--- Case expressions
-----------------------------------------------------------------
-caseExpr
-    = do{ reserved "case"
-        ; e <- expr
-        ; reserved "of"
-        ; as <- braces (semiSep1 alt)
-        ; es <- option [] (do{ reserved "at"
-                             ; braces (semiSep expr)
-                             })
-        ; return (Case e as es)
-        }
-        
-alt
-    = do{ pat <- pattern
-        ; symbol "=>"
-        ; e   <- expr
-        ; return (pat e)
-        }
-        
-pattern
-    =   do{ p <- atomPattern
-          ; vs <- commaSep boundVar
-          ; return (\e -> Alt p (foldr Lam e vs))
-          }
-          
-atomPattern
-    =   do{ v <- boundVar
-          ; return (PatVar v)
-          }
-    <|> do{ l <- literal
-          ; return (PatLit l)
-          }
-    <?> "pattern"    
-
-
-----------------------------------------------------------------
--- Syntactic sugar: ->, \/, /\
-----------------------------------------------------------------
-functionExpr
-    = chainr1 appExpr arrow
-    where
-      arrow  = do{ symbol "->"
-                 ; return ((\x y -> 
-                             Pi (TVar anonymous x) y))
-                 }
-             <?> ""
-
-bigLamdaExpr
-    = do{ symbol "/\\"
-        ; ts <- commaSep1 bindVar
-        ; symbol "."
-        ; e  <- expr
-        ; return (foldr Lam e ts)
-        }
-
-forallExpr
-    = do{ try (symbol "\\/")          -- use "try" to try "\" (lambda) too.
-        ; ts <- commaSep1 bindVar
-        ; symbol "."
-        ; e  <- expr
-        ; return (foldr Pi e ts)
-        }
-
-----------------------------------------------------------------
--- Simple expressions
-----------------------------------------------------------------
-appExpr 
-    = do{ es <- many1 atomExpr
-        ; return (foldl1 App es)
-        }
-
-atomExpr
-    =   parens expr
-    <|> do{ v <- boundVar; return (Var v)    }
-    <|> do{ l <- literal; return (Lit l)}
-    <|> do{ symbol "*"; return Star     }
-    <|> do{ symbol "[]"; return Box     }
-    <|> do{ symbol "?"; return Unknown  }
-    <?> "simple expression"
-
-
-----------------------------------------------------------------
--- Variables & Literals
-----------------------------------------------------------------
-variable    
-    = identifier
-
-anonymousVar
-    = lexeme $
-      do{ c <- char '_'
-        ; cs <- many (identLetter henkDef)
-        ; return (c:cs)
-        }
-        
-bindVar    
-    = do{ i <- variable <|> anonymousVar
-        ; do{ e <- varType
-            ; return (TVar i e)
-            }
-          <|> return (TVar i Star)
-        }
-    <?> "variable"
-
-boundVar    
-    = do{ i <- variable
-        ; do{ e <- varType
-            ; return (TVar i e)
-            }
-          <|> return (TVar i Unknown)
-        }
-    <?> "variable"
-
-
-tvar
-    = do{ v <- variable
-        ; t <- varType 
-        ; return (TVar v t)
-        }
-    <?> "typed variable"
-    
-varType
-    = do{ symbol ":"
-        ; expr
-        }
-    <?> "variable type"
-
-literal
-    = do{ i <- natural
-        ; return (LitInt i) 
-        }
-    <?> "literal"
-
-
-----------------------------------------------------------------
--- Tokens
-----------------------------------------------------------------
-henk            = P.makeTokenParser henkDef
-
-lexeme          = P.lexeme henk
-parens          = P.parens henk    
-braces          = P.braces henk    
-semiSep         = P.semiSep henk    
-semiSep1        = P.semiSep1 henk    
-commaSep        = P.commaSep henk    
-commaSep1       = P.commaSep1 henk    
-whiteSpace      = P.whiteSpace henk    
-symbol          = P.symbol henk    
-identifier      = P.identifier henk    
-reserved        = P.reserved henk    
-natural         = P.natural henk    
-
-
-henkDef
-    = haskellStyle
-    { identStart        = letter
-    , identLetter       = alphaNum <|> oneOf "_'"
-    , opStart           = opLetter henkDef
-    , opLetter          = oneOf ":=\\->/|~.*[]"
-    , reservedOpNames   = ["::","=","\\","->","=>","/\\","\\/"
-                          ,"|~|",".",":","*","[]"]  
-    , reservedNames     = [ "case", "data", "letrec", "type"
-                          , "import", "in", "let", "of", "at"
-                          ] 
-    }
diff --git a/Text/ParserCombinators/Parsec/examples/Henk/Main.hs b/Text/ParserCombinators/Parsec/examples/Henk/Main.hs
deleted file mode 100644 (file)
index fed9adb..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-----------------------------------------------------------------
--- Henk
--- Copyright 2000, Jan-Willem Roorda
-----------------------------------------------------------------
-module Main where
-
-import Text.ParserCombinators.Parsec
-
-import HenkAS
-import HenkParser
-
-
-welcome = "__   __ ______ __   __ ____   __________________________________________\n"++
-          "||   || ||  || ||\\  || ||//   Henk 2000: Based on Pure Type Systems     \n"++
-          "||___|| ||_|   ||\\\\ || ||\\\\                                             \n"++
-          "||---|| ||-|__ || \\\\||        WWW http://www.students.cs.uu.nl/~jwroorda\n"++
-          "||   || ||__||                Report bugs to: jwroorda@math.uu.nl       \n"++
-          "||   || Version: Jan 2000     __________________________________________\n\n"
-
-
-
-test fname     
-        = do{ putStr welcome          
-            ; result <- parseFromFile program (root ++ fname ++ ".h")
-            ; case result of              
-                Left err -> do{ putStr "parse error at: "
-                              ; print err
-                              }
-                Right x  -> print x          
-            }
-        where
-          root = ""
-
-
-main = test "test"
-
diff --git a/Text/ParserCombinators/Parsec/examples/Henk/test.h b/Text/ParserCombinators/Parsec/examples/Henk/test.h
deleted file mode 100644 (file)
index d69d4e0..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
--- type declarations
-data List: * -> *
-    = { Nil: \/a. List a
-         ; Cons : \/a. a -> List a -> List a
-         };
-                                                         
-data Maybe : * -> * -> *
-       = { Left:  \/a,b. a -> Maybe a b
-      ; Right:  \/a,b. b -> Maybe a b 
-      }
-                              
--- value declarations
-let id : \/a. a->a 
-       = /\a. \x:a. x;
-       
-letrec { map: \/a,b. a -> b -> List a -> List b 
-       = /\a,b. 
-      \f: a->b,xs:List a.
-             case (xs) of 
-             { Nil =>Nil
-             ; Cons => \x:a, xx: List a. 
-                                       Cons (f x) (map a b f xx)
-             } 
-             at {a:*}
-         };
-         
-letrec { reverse: \/a. List a -> List a
-             = /\a.\xs:List a.
-                case xs of
-                { Nil => Nil
-                ; Cons x,xx => append (reverse xx) (Cons x Nil)
-                }
-                at {a:*}
-          };
-          
-letrec { append: \/a. |~|_dummy:List a.|~|_:List a.List a
-           = /\a.\xs:List a, ys:List a.
-              case xs of
-              { Nil  => ys
-              ; Cons x:a,xx: List a => Cons x (append xx ys)
-              }
-              at {a:*}
-       }
-
-         
diff --git a/Text/ParserCombinators/Parsec/examples/Mondrian/Main.hs b/Text/ParserCombinators/Parsec/examples/Mondrian/Main.hs
deleted file mode 100644 (file)
index 3073a76..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
------------------------------------------------------------
--- Daan Leijen (c) 1999-2000, daan@cs.uu.nl
------------------------------------------------------------
-module Main where
-
-import MonParser (prettyFile)
-
-
-main    :: IO ()
-main   = prettyFile "prelude.m"
diff --git a/Text/ParserCombinators/Parsec/examples/Mondrian/MonParser.hs b/Text/ParserCombinators/Parsec/examples/Mondrian/MonParser.hs
deleted file mode 100644 (file)
index 37253fd..0000000
+++ /dev/null
@@ -1,307 +0,0 @@
------------------------------------------------------------
--- Daan Leijen (c) 1999-2000, daan@cs.uu.nl
------------------------------------------------------------
-module MonParser ( parseMondrian
-                 , parseMondrianFromFile
-                 , prettyFile
-                 
-                 , ParseError
-                 ) where
-
-import Char
-import Monad
-import Mondrian
-import Utils        (groupLambdas)
-
--- Parsec
-import Text.ParserCombinators.Parsec
-import Text.ParserCombinators.Parsec.Expr
-import qualified Text.ParserCombinators.Parsec.Token as P
-import Text.ParserCombinators.Parsec.Language (mondrianDef)
-
---testing
-import qualified SimpleMondrianPrinter as Pretty    
-
-
-
-
------------------------------------------------------------
--- 
------------------------------------------------------------
-parseMondrianFromFile :: String -> IO (Either ParseError CompilationUnit)
-parseMondrianFromFile fname =
-    parseFromFile compilationUnit fname
-
-parseMondrian sourceName source =
-    parse compilationUnit sourceName source
-
-
-       
--- testing
-prettyFile fname
-    = do{ result <- parseMondrianFromFile fname
-        ; case result of
-            Left err    -> putStr ("parse error at: " ++ show err)
-            Right x     -> print (Pretty.compilationUnit x)
-        }
-
-
------------------------------------------------------------
--- GRAMMAR ELEMENTS
------------------------------------------------------------    
-compilationUnit :: Parser CompilationUnit    
-compilationUnit =
-    do{ whiteSpace
-      ; reserved "package"
-      ; name  <- option [""] packageName
-      ; decls <- option []   declarations
-      ; eof
-      ; return $ Package name decls
-      }
-
------------------------------------------------------------
--- Declarations
------------------------------------------------------------    
-declarations =
-    braces (semiSep1 declaration)
-    
-declaration =
-        importDeclaration
-    <|> classDeclaration
-    <|> variableSignatureDeclaration         
-    <?> "declaration"
-    
-variableSignatureDeclaration =
-    do{ name <- variableName
-      ; variableDeclaration name <|> signatureDeclaration name
-      }    
-    
-variableDeclaration name =
-    do{ symbol "=" 
-      ; expr <- expression
-      ; return $ VarDecl name expr
-      }
-    <?> "variable declaration"
-importDeclaration =
-    do{ reserved "import"
-      ; name <- packageName
-      ; star <- option [] (do{ symbol "."
-                             ; symbol "*"
-                             ; return ["*"] 
-                             })
-      ; return $ ImportDecl (name ++ star)
-      }
-      
-classDeclaration =
-    do{ reserved "class"
-      ; name    <- className
-      ; extends <- option [] (do{ reserved "extends"
-                                ; n <- className
-                                ; return [n]
-                                })
-      ; decls   <- option [] declarations
-      ; return $ ClassDecl name extends decls
-      }
-
-signatureDeclaration name =
-    do{ symbol "::"
-      ; texpr  <- typeExpression
-      ; return $ SigDecl name texpr
-      }
-    <?> "type declaration"  
-    
-      
------------------------------------------------------------
--- Expressions
------------------------------------------------------------    
-expression :: Parser Expr      
-expression =
-        lambdaExpression 
-    <|> letExpression 
-    <|> newExpression 
-    <|> infixExpression     
-    <?> "expression"
-    
-lambdaExpression =
-    do{ symbol "\\" 
-      ; name <- variableName
-      ; symbol "->"
-      ; expr <- expression
-      ; return $ groupLambdas (Lambda [name] expr)
-      }
-
-letExpression =
-    do{ reserved "let"
-      ; decls <- declarations
-      ; reserved "in"
-      ; expr <- expression
-      ; return $ Let decls expr
-      }
-
-newExpression =
-    do{ reserved "new"
-      ; name  <- className
-      ; decls <- option [] declarations
-      ; return $ New name decls
-      }
-
-
------------------------------------------------------------
--- Infix expression
------------------------------------------------------------
-infixExpression = 
-    buildExpressionParser operators applyExpression
-    
-operators =
-    [ [ prefix "-", prefix "+" ]
-    , [ op "^"  AssocRight ]
-    , [ op "*"  AssocLeft, op "/"  AssocLeft ]
-    , [ op "+"  AssocLeft, op "-"  AssocLeft ]
-    , [ op "==" AssocNone, op "/=" AssocNone, op "<"  AssocNone
-      , op "<=" AssocNone, op ">"  AssocNone, op ">=" AssocNone ]
-    , [ op "&&" AssocNone ]
-    , [ op "||" AssocNone ]
-    ]
-    where
-      op name assoc   = Infix (do{ var <- try (symbol name)
-                                  ; return (\x y -> App (App (Var [var]) x) y) 
-                                  }) assoc
-      prefix name     = Prefix  (do{ var <- try (symbol name)
-                                  ; return (\x -> App (Var [var,"unary"]) x)
-                                  })                                  
-                                                
-  
-
-applyExpression =
-    do{ exprs <- many1 simpleExpression
-      ; return (foldl1 App exprs)
-      }
-      
-{-
-infixExpression =
-    do{ (e,es) <- chain simpleExpression operator "infix expression"
-      ; return $ if null es then e else (unChain (Chain e es))
-      }
--}
-    
-simpleExpression :: Parser Expr    
-simpleExpression =
-        literal
-    <|> parens expression
-    <|> caseExpression
-    <|> variable            
-    <?> "simple expression"
-  
-          
------------------------------------------------------------
--- Case expression
------------------------------------------------------------
-caseExpression =
-    do{ reserved "case"
-      ; expr <- variable
-      ; reserved "of"
-      ; alts <- alternatives
-      ; return $ Case expr alts
-      }
-
-alternatives =
-    braces (semiSep1 arm)
-
-arm =
-    do{ pat <- pattern
-      ; symbol "->"      
-      ; expr <- expression
-      ; return (pat,expr)
-      }
-        
-pattern =
-        do{ reserved "default"
-          ; return Default
-          }    
-    <|> do{ name  <- patternName                 
-          ; decls <- option [] declarations
-          ; return $ Pattern name decls
-          }
-    <?> "pattern"
-
-
------------------------------------------------------------
--- Type expression
------------------------------------------------------------
-
-{-
-typeExpression =
-    do{ (e,es) <- chain simpleType typeOperator "type expression"
-      ; return $ if null es then e else Chain e es
-      }
-    <?> "type expression"  
--}
-
-typeExpression :: Parser Expr
-typeExpression =
-    do{ exprs <- sepBy1 simpleType (symbol "->")  
-      ; return (foldl1 (\x y -> App (App (Var ["->"]) x) y) exprs)
-      }
-      
-simpleType :: Parser Expr      
-simpleType =
-        parens typeExpression
-    <|> variable
-    <?> "simple type"
-
-
-
------------------------------------------------------------
--- LEXICAL ELEMENTS
------------------------------------------------------------
-
-
------------------------------------------------------------
--- Identifiers & Reserved words
------------------------------------------------------------
-variable =
-    do{ name <- variableName    
-      ; return $ Var name
-      }
-                
-patternName   = qualifiedName <?> "pattern variable"        
-variableName  = qualifiedName <?> "identifier"
-className     = qualifiedName <?> "class name"
-packageName   = qualifiedName <?> "package name"         
-        
-qualifiedName =
-    identifier `sepBy1` (symbol "." <?> "")
-
-
------------------------------------------------------------
--- Literals
------------------------------------------------------------
-literal =
-    do{ v <- intLiteral <|> chrLiteral <|> strLiteral
-      ; return $ Lit v
-      }
-    <?> "literal"  
-
-intLiteral  = do{ n <- natural; return (IntLit n) }
-chrLiteral  = do{ c <- charLiteral; return (CharLit c) }
-strLiteral  = do{ s <- stringLiteral; return (StringLit s) }
-
-
-
------------------------------------------------------------
--- Tokens
--- Use qualified import to have token parsers on toplevel
------------------------------------------------------------
-mondrian        = P.makeTokenParser mondrianDef    
-    
-parens          = P.parens mondrian    
-braces          = P.braces mondrian    
-semiSep1        = P.semiSep1 mondrian    
-whiteSpace      = P.whiteSpace mondrian    
-symbol          = P.symbol mondrian    
-identifier      = P.identifier mondrian    
-reserved        = P.reserved mondrian    
-natural         = P.natural mondrian    
-charLiteral     = P.charLiteral mondrian    
-stringLiteral   = P.stringLiteral mondrian    
diff --git a/Text/ParserCombinators/Parsec/examples/Mondrian/Mondrian.hs b/Text/ParserCombinators/Parsec/examples/Mondrian/Mondrian.hs
deleted file mode 100644 (file)
index d8e3c5a..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-{-
-Abstract Syntax for Core Mondrian
-(c) 1999 Erik Meijer and Arjan van Yzendoorn
--}
-
-module Mondrian where 
-
-data CompilationUnit
-  = Package Name [Decl]
-    deriving Show
-
-data Decl
- = ClassDecl Name [Name] [Decl]    
- | ImportDecl Name
- | VarDecl Name Expr
- | SigDecl Name Expr
-   deriving Show
-
-data Expr
-  = Lit Lit
-  | Var Name
-  | Case Expr [(Pattern, Expr)]
-  | Let [Decl] Expr
-  | Lambda [Name] Expr
-  | App Expr Expr
-  | New Name [Decl]
-  | Chain Expr [(Name, Expr)] 
-    deriving Show
-      
-data Pattern 
-  = Pattern Name [Decl]
-  | Default
-    deriving Show
-  
-data Lit
-  = IntLit Integer
-  | CharLit Char
-  | StringLit String
-    deriving Show
-    
-type Name = [String]
diff --git a/Text/ParserCombinators/Parsec/examples/Mondrian/Prelude.m b/Text/ParserCombinators/Parsec/examples/Mondrian/Prelude.m
deleted file mode 100644 (file)
index f550690..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-package Prelude
-{ import Foo
-
-; class List extends Mondrian
-; class Nil extends List
-; class Cons extends List
-    { head :: Mondrian
-    ; tail :: List
-    }
-    
-; map = \f -> \as ->
-    case as of
-      { Nil -> new Nil
-      ; Cons{ a :: Mondrian; a = head; as :: List; as = tail } ->
-          new Cons{ head = f a; tail = map f as }
-      }
-      
-; class Boolean extends Mondrian
-; class True extends Boolean
-; class False extends Boolean
-      
-; cond = \b -> \t -> \e ->
-    case b of
-      { True -> t
-      ; False -> e
-      }
-      
-; fac = \n -> cond (n == 0) 1 (n * (fac (n - 1)))
-
-; I :: a -> a
-; I = \x -> x
-
-; K :: a -> b -> a
-; K = \x -> \y -> x
-
-; S :: (a -> b -> c) -> (a -> b) -> (a -> c)
-; S = \f -> \g -> \x -> f x (g x)
-
-; Compose :: (b -> c) -> (a -> b) -> (a -> c)
-; Compose = \f -> \g -> \x -> f (g x)
-
-; Twice :: (a -> a) -> (a -> a)
-; Twice = \f -> Compose f f
-
-; main = Twice I 3
-}
\ No newline at end of file
diff --git a/Text/ParserCombinators/Parsec/examples/Mondrian/Pretty.hs b/Text/ParserCombinators/Parsec/examples/Mondrian/Pretty.hs
deleted file mode 100644 (file)
index 5b399e8..0000000
+++ /dev/null
@@ -1,161 +0,0 @@
-{-
-Copyright(C) 1999 Erik Meijer
--}
-module Pretty where
-
-{-
-
-Quick reference for the simple Pretty-print Combinators
-
-  |---|     |----|   |-------|
-  |koe| <|> |beer| = |koebeer|
-  |---|     |----|   |-------|
-
-  |---|     |----|   |--------|
-  |koe| <+> |beer| = |koe beer|
-  |---|     |----|   |--------|
-
-  |---|     |----|   |----|
-  |koe| <-> |beer| = |koe |
-  |---|     |----|   |beer|
-                     |----|
-
-  |---|            |----|   |-------|
-  |koe| <|> nest 2 |beer| = |koebeer|
-  |---|            |----|   |-------|
-
-  |---|            |----|   |------|
-  |koe| <-> nest 2 |beer| = |koe   |
-  |---|            |----|   |  beer|
-                            |------|
-                            
-  empty =                            
--}
-
-{-
-
-Extremely simplified version of John Hughes' combinators, 
-without (sep), but with (empty).
-
-TODO: use Okasaki-style catenable dequeues to represent Doc
-
-(c) Erik Meijer and Arjan van IJzendoorn
-
-October 199
-
--}
-
-infixl 7 <+>
-infixl 6 <|>
-infixr 5 <->
-  
-instance Show Doc where
-  { showsPrec = showsPrecDoc }
-
-showsPrecDoc i = \d ->
-  case d of
-    { Empty -> id
-    ; Doc ds -> layout ds
-    }
-data Doc
-  = Doc [(Int,ShowS)]
-  | Empty
-  
-layout :: [(Int,ShowS)] -> ShowS
-layout = \ds ->
-  case ds of
-    { []       -> showString ""
-    ; [(n,s)]  -> indent n.s
-    ; (n,s):ds -> indent n.s.showString "\n".layout ds
-    }
-
-width :: Doc -> Int
-width = \d ->
-  case d of
-    { Empty -> 0
-    ; Doc ds -> maximum [ i + length (s "") | (i,s) <- ds ]
-    }
-  
-text :: String -> Doc
-text = \s -> Doc [(0,showString s)]
-
-nest :: Int -> Doc -> Doc
-nest n = \d ->
-  case d of
-    { Empty -> Empty
-    ; Doc ds -> Doc [ (i+n,d) | (i,d) <- ds ]
-    }
-
-(<->) :: Doc -> Doc -> Doc
-Empty <-> Empty = Empty
-Empty <-> (Doc d2) = Doc d2
-(Doc d1) <-> Empty = Doc d1
-(Doc d1) <-> (Doc d2) = Doc (d1++d2)
-
-(<+>) :: Doc -> Doc -> Doc
-a <+> b = a <|> (text " ") <|> b
-
-(<|>) :: Doc -> Doc -> Doc
-Empty <|> Empty = Empty
-Empty <|> (Doc d2) = Doc d2
-(Doc d1) <|> Empty = Doc d1
-(Doc d1) <|> (Doc d2) =
-  let 
-    { (d,(i,s)) = (init d1,last d1)
-    ; ((j,t),e) = (head d2,tail d2)
-    }
-  in
-    (    Doc d 
-     <-> Doc [(i,s.t)] 
-     <-> nest (i + length (s "") - j) (Doc e)
-    )
-    
--- Derived operations
-
-empty :: Doc
-empty = Empty
-
-{-
-
-horizontal s [a,b,c] =
-  a <|> (s <|> b) <|> (s <|> c)
-
--}
-
-horizontal :: Doc -> [Doc] -> Doc
-horizontal s = \ds ->
-  case ds of
-    { [] -> empty
-    ; ds -> foldr1 (\d -> \ds -> d <|> s <|> ds) ds
-    }
-
-{-
-
-vertical s [a,b,c] =
-  a
-  <->
-  (s <|> b)
-  <->
-  (s <|> c)
-
--}
-
-vertical :: [Doc] -> Doc
-vertical = \ds ->
-  case ds of
-    { [] -> empty
-    ; d:ds -> d <-> vertical ds
-    }
-
-block (o,s,c) = \ds ->
-  case ds of
-    { [] -> o<|>c
-    ; [d] -> o<|>d<|>c\r    ; d:ds -> (vertical ((o <|> d):[s <|> d | d <- ds ])) <-> c
-    }
-    
--- Helper function
-
-indent :: Int -> ShowS
-indent = \n ->
-  showString [ ' ' | i <- [1..n] ]
diff --git a/Text/ParserCombinators/Parsec/examples/Mondrian/SimpleMondrianPrinter.hs b/Text/ParserCombinators/Parsec/examples/Mondrian/SimpleMondrianPrinter.hs
deleted file mode 100644 (file)
index b3c6f86..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-{-
-Copyright(C) 1999 Erik Meijer and Arjan van Yzendoorn
--}
-module SimpleMondrianPrinter where
-
-import Mondrian
-import Pretty
-import Utils
-
-mondrianIndent :: Int
-mondrianIndent = 2
-
-compilationUnit :: CompilationUnit -> Doc
-compilationUnit = \m ->
-  case m of 
-    { Package n ds -> package m (name n) (decls ds) 
-    }
-
-package = \(Package n' ds') -> \n -> \ds -> 
-  case null ds' of
-    { True -> text "package" <+> n <+> row ds
-    ; False -> text "package" <+> n <-> nest (-mondrianIndent) (column ds)
-    }
-
-decls = \ds -> [ decl d | d <- ds ]
-
-decl = \d ->
-  case d of
-    { ImportDecl ns -> importDecl d (name ns)
-    ; ClassDecl n xs ds -> classDecl d (name n) (extends xs) (decls ds)
-    ; SigDecl n t -> sigDecl (name n) (expr t)
-    ; VarDecl v (Lambda ns e) -> varDecl d (name v) (lambdas ns) (expr e)
-    ; VarDecl v e -> decl (VarDecl v (Lambda [] e))
-    }
-
-extends = \xs ->
-  case xs of 
-    { [] -> empty
-    ; [x] -> text "extends" <+> name x <+> empty
-    ; xs -> text "multiple inheritance not supported" <+> row [name x | x <- xs]
-    } 
-    
-classDecl = \(ClassDecl n' xs' ds') -> \n -> \xs -> \ds -> 
-  case ds' of
-    { [] -> text "class" <+> n <+> xs
-    ; otherwise -> text "class" <+> n <+> xs <-> column ds
-    }
-
-sigDecl = \n -> \t -> n <+> text "::" <+> t
-    
-importDecl = \d -> \n -> text "import" <+> n
-
-varDecl = \(VarDecl v' (Lambda ns' e')) -> \v -> \ns -> \e ->
-  if isSimpleExpr e'
-  then v <+> text "=" <+> ns <|> e
-  else v <+> text "=" <+> ns <-> nest mondrianIndent e
-
-names = \ns -> horizontal (text " ") [ name n | n <- ns ]       
-                 
-name = \ns -> horizontal (text ".") [text n | n <- ns]
-  
-lambdas = \ns ->
-  case ns of 
-    { []   -> empty
-    ; [n]  -> text "\\" <|> name n <+> text "->" <+> empty
-    ; n:ns -> text "\\" <|> name n <+> text "->" <+> lambdas ns
-    }
-
-expr = \e ->
-  case e of
-    { Lit l -> lit l
-    ; Var n -> name n
-    ; App f a -> application (expr f) (expr a)
-    ; Lambda ns b -> lambdaExpr e (lambdas ns) (expr b)
-    ; New n ds -> newExpr e (name n) (decls ds)
-    ; Case e1 as -> caseExpr e (expr e1) (arms as)
-    ; Let ds e1 -> letExpr e (decls ds) (expr e1)                                            
-    ; Chain e1 oes -> chain e1 oes
-    }
-   
-application = \f -> \a -> text "(" <|> f <+> a <|> text ")"
-
-newExpr = \(New n' ds') -> \n -> \ds ->
-  case ds' of
-    { [] -> text "new" <+> n
-    ; otherwise -> 
-        if isSimpleDecls ds'
-        then text "new" <+> n <+> row ds
-        else text "new" <+> n <-> column ds
-    }
-    
-lambdaExpr = \(Lambda ns' e') -> \ns -> \e ->
-  if isSimpleExpr e'
-  then ns <|> e
-  else ns <-> nest mondrianIndent e
-
-caseExpr :: Expr -> Doc -> [Doc] -> Doc
-caseExpr = \(Case e' as') -> \e -> \as ->
-  case (isSimpleExpr e', isSimpleArms as') of
-    { (True, True) -> text "case" <+> e <+> text "of" <+> row as
-    ; (True, False)-> text "case" <+> e <+> text "of" <-> column as
-    ; (False, True) -> text "case" <-> nest mondrianIndent e <-> text "of" <+> row as
-    ; (False, False) -> text "case" <-> nest mondrianIndent e <-> text "of" <-> column as
-    }
-  
-letExpr = \(Let ds' e') -> \ds -> \e ->
-  case (length ds' == 1 && isSimpleDecls ds', isSimpleExpr e') of
-    { (True, True) -> text "let" <+> row ds <+> text "in" <+> e
-    ; (True, False) -> text "let" <+> row ds <-> text "in" <-> nest mondrianIndent e
-    ; (False, True) -> text "let" <-> column ds <-> text "in" <+> e
-    ; (False, False) -> text "let" <-> column ds <-> text "in" <-> nest mondrianIndent e
-    }
-
-arms = \as -> [ arm (p,e) (pattern p) (expr e) | (p,e) <- as ]
-  
-arm = \(p',e') -> \p -> \e ->
-  if isSimplePattern p' && isSimpleExpr e'
-  then p <+> text "->" <+> e
-  else p <+> text "->" <-> nest mondrianIndent e
-    
--- This is a dirty hack!
-
-chain = \e -> \oes ->
-  case oes of
-    { []        -> bracket e
-    ; ([""],f):oes -> if (isSimpleExpr f)
-                   then (bracket e) <+> chain f oes
-                   else (bracket e) <-> nest 2 (chain f oes)
-    ; (o,f):oes -> if (isSimpleExpr f)
-                   then (bracket e) <+> name o <+> chain f oes
-                   else (bracket e) <-> name o <+> chain f oes           
-    }
-
-pattern = \p ->
-  case p of
-    { Pattern n ds -> 
-        case ds of
-          { [] -> name n
-          ; otherwise -> name n <+> row (decls ds)
-          }
-    ; Default -> text "default"
-    }
-    
-lit = \l ->
-  case l of
-    { IntLit i    -> text (show i)
-    ; CharLit c   -> text (show c)
-    ; StringLit s -> text (show s)
-    }
-
-bracket = \e ->
-  case e of
-    { Lit l -> expr e
-    ; Var n -> expr e
-    ; e     -> par (expr e)
-    }
-
-par = \e -> text "(" <|> e <|> text ")"
-
-column = \ds -> nest mondrianIndent (block (text "{ ", text ";" <+> empty, text "}") ds)
-
-row = \ds -> text "{" <|> horizontal (text ";" <+> empty) ds <|> text "}"
\ No newline at end of file
diff --git a/Text/ParserCombinators/Parsec/examples/Mondrian/Utils.hs b/Text/ParserCombinators/Parsec/examples/Mondrian/Utils.hs
deleted file mode 100644 (file)
index 00d9056..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-{-
-Copyright(C) 1999 Erik Meijer and Arjan van Yzendoorn
-
-Determines wether an express/declaration is "simple".
-The pretty-printing strategy is to print a "complex" expression
-on a new line.
--}
-
-module Utils where
-
-import Mondrian
-isSimpleExpr :: Expr -> Bool
-isSimpleExpr = \e ->
-  case e of
-    { Lit l -> True
-    ; Var n -> True
-    ; Case e as -> and [ isSimpleArms as, isSimpleExpr e ]
-    ; Let ds e -> and [ isSimpleDecls ds, isSimpleExpr e ]
-    ; Lambda n e -> isSimpleExpr e
-    ; New n ds -> all isSimpleDecl ds
-    ; App f a -> and [ isSimpleExpr f, isSimpleExpr a]
-    ; Chain e oes -> and [ isSimpleExpr e, all isSimpleExpr [ e | (o,e) <- oes ] ]
-    }
-
-isSimpleArms = \as ->
-  and [ length as == 1, all isSimpleExpr [ e | (p,e) <- as ], all isSimplePattern [ p | (p,e) <- as ] ]
-
-isSimplePattern = \ p->
-  case p of
-    { Pattern n ds -> isSimpleDecls ds
-    ; Default -> True
-    }
-
-isSimpleDecls = \ds ->
-  and [ all isSimpleDecl ds ]
-  
-isSimpleDecl = \d ->
-  case d of
-    { ClassDecl n ns ds -> False
-    ; ImportDecl n -> True
-    ; VarDecl n e -> isSimpleExpr e
-    ; SigDecl n e -> True
-    }
-
-groupLambdas :: Expr -> Expr
-groupLambdas = \e ->
-  case e of
-    { Lambda ns (Lambda ms e) -> groupLambdas (Lambda (ns++ms) e)
-    ; otherwise -> e
-    }
-
-isTopLevel :: [Name] -> Name -> Bool
-isTopLevel = \topLevel -> \n ->
-  n `elem` topLevel
-  
-topLevel :: CompilationUnit -> [Name]
-topLevel = \p ->
-  case p of 
-    { Package n ds -> [ n | VarDecl n e <- ds ]
-    }
diff --git a/Text/ParserCombinators/Parsec/examples/Mondrian/test.m b/Text/ParserCombinators/Parsec/examples/Mondrian/test.m
deleted file mode 100644 (file)
index 3777e0d..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-package Koe
-{
-Id =\x -> /* multi-line
-Comment_ */ x // the identity function
-;
-K = \x -> \y_ -> x
-
-;fac = \n -> 
-  case n of
-    { n -> n
-    ; n -> let { m = minus n 1 } in times n (fac m)
-    }    
-; class Hi extends Mondrian { x = 2}
-}
diff --git a/Text/ParserCombinators/Parsec/examples/UserGuide/Main.hs b/Text/ParserCombinators/Parsec/examples/UserGuide/Main.hs
deleted file mode 100644 (file)
index db4f26d..0000000
+++ /dev/null
@@ -1,181 +0,0 @@
------------------------------------------------------------
--- Daan Leijen (c) 2000, daan@cs.uu.nl
------------------------------------------------------------
-module Main where
-
-import Text.ParserCombinators.Parsec
-import Text.ParserCombinators.Parsec.Expr
-import Text.ParserCombinators.Parsec.Token
-import Text.ParserCombinators.Parsec.Language 
-
-               
-    
------------------------------------------------------------
--- 
------------------------------------------------------------
-run :: Show a => Parser a -> String -> IO ()
-run p input
-        = case (parse p "" input) of
-            Left err -> do{ putStr "parse error at "
-                          ; print err
-                          }
-            Right x  -> print x
-
-
-runLex :: Show a => Parser a -> String -> IO ()
-runLex p 
-        = run (do{ whiteSpace lang
-                 ; x <- p
-                 ; eof
-                 ; return x
-                 }
-              ) 
-
------------------------------------------------------------
--- Sequence and choice 
------------------------------------------------------------
-simple  :: Parser Char
-simple  = letter
-
-openClose :: Parser Char
-openClose = do{ char '('
-              ; char ')'
-              }
-            
-matching:: Parser ()
-matching= do{ char '('
-            ; matching
-            ; char ')'
-            ; matching
-            }
-        <|> return ()
-        
-
--- Predictive parsing
-testOr  =   do{ char '('; char 'a'; char ')' }
-        <|> do{ char '('; char 'b'; char ')' }
-        
-testOr1 = do{ char '('
-            ; char 'a' <|> char 'b'
-            ; char ')'
-            }
-            
-testOr2 =   try (do{ char '('; char 'a'; char ')' })
-        <|> do{ char '('; char 'b'; char ')' }                    
-        
-   
--- Semantics        
-nesting :: Parser Int
-nesting = do{ char '('
-            ; n <- nesting
-            ; char ')'
-            ; m <- nesting
-            ; return (max (n+1) m)
-            }
-        <|> return 0        
-
-word1   :: Parser String
-word1   = do{ c  <- letter
-            ; do{ cs <- word1
-                ; return (c:cs)
-                }
-              <|> return [c]
-            }  
-
------------------------------------------------------------
--- 
------------------------------------------------------------
-
-word    :: Parser String
-word    = many1 (letter <?> "") <?> "word"
-
-sentence    :: Parser [String]
-sentence    = do{ words <- sepBy1 word separator
-                ; oneOf ".?!" <?> "end of sentence"
-                ; return words
-                }
-                
-separator   :: Parser ()
-separator   = skipMany1 (space <|> char ',' <?> "")
-
-
------------------------------------------------------------
--- Tokens
------------------------------------------------------------
-lang    = makeTokenParser 
-            (haskellStyle{ reservedNames = ["return","total"]})
-
-
------------------------------------------------------------
--- 
------------------------------------------------------------
-expr    = buildExpressionParser table factor
-        <?> "expression"
-        
-table   = [[op "*" (*) AssocLeft, op "/" div AssocLeft]
-          ,[op "+" (+) AssocLeft, op "-" (-) AssocLeft]
-          ]
-        where
-          op s f assoc
-             = Infix (do{ symbol lang s; return f} <?> "operator") assoc
-
-factor  =   parens lang expr
-        <|> natural lang
-        <?> "simple expression"
-
-
-test1   = do{ n <- natural lang
-            ; do{ symbol lang "+"
-                ; m <- natural lang
-                ; return (n+m) 
-                } 
-            <|> return n
-            }
-
------------------------------------------------------------
---
------------------------------------------------------------
-{-
-receipt ::= product* total
-product ::= "return" price ";"
-                 | identifier price ";"                  
-total   ::= price "total"
-price   ::= natural "." digit digit
--}
-
-receipt :: Parser Bool
-receipt        = do{ ps <- many produkt
-           ; p  <- total
-           ; return (sum ps == p)
-           }
-                       
-produkt = do{ reserved lang "return"
-           ; p <- price
-           ; semi lang
-           ; return (-p)
-           }
-      <|> do{ identifier lang
-                   ; p  <- price
-           ; semi lang
-           ; return p
-           }
-      <?> "product"
-
-total  = do{ p <- price
-           ; reserved lang "total"
-           ; return p
-           }
-       
-price   :: Parser Int                  
-price   = lexeme lang (
-         do{ ds1 <- many1 digit
-           ; char '.'
-           ; ds2 <- count 2 digit
-           ; return (convert 0 (ds1 ++ ds2))                   
-           })
-         <?> "price"
-         where
-           convert n []     = n
-           convert n (d:ds) = convert (10*n + digitToInt d) ds
-               
-                       
diff --git a/Text/ParserCombinators/Parsec/examples/tiger/Main.hs b/Text/ParserCombinators/Parsec/examples/tiger/Main.hs
deleted file mode 100644 (file)
index 0029171..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-{---------------------------------------------------------------
-Daan Leijen (c) 2001.  daan@cs.uu.nl
-
-$Revision: 1.1 $
-$Author: panne $
-$Date: 2002/05/31 12:22:35 $
----------------------------------------------------------------}
-module Main where
-
-import Tiger( prettyTigerFromFile )
-
-main  = prettyTigerFromFile "fac.tig"
diff --git a/Text/ParserCombinators/Parsec/examples/tiger/Tiger.hs b/Text/ParserCombinators/Parsec/examples/tiger/Tiger.hs
deleted file mode 100644 (file)
index 7849cab..0000000
+++ /dev/null
@@ -1,347 +0,0 @@
--------------------------------------------------------------
--- Parser for Tiger from Appel's book on compilers.
--- Semantic checks have been omitted for now.
--- Scope rules and such are as a consequence not implemented.
--------------------------------------------------------------
-
-module Tiger( prettyTigerFromFile ) where
-
-import TigerAS
-import Text.ParserCombinators.Parsec
-import Text.ParserCombinators.Parsec.Expr
-import qualified Text.ParserCombinators.Parsec.Token as P
-import Text.ParserCombinators.Parsec.Language( javaStyle )
-          
-
-prettyTigerFromFile fname
-  = do{ input <- readFile fname
-      ; putStr input
-      ; case parse program fname input of
-           Left err -> do{ putStr "parse error at "
-                           ; print err
-                           }
-           Right x  -> print x
-      }
-
-{-
-main = do putStr "Parsec Tiger parser\n"
-          putStr "Type filename (without suffix): "
-          basename <- getLine
-          tokens <- scanner False keywordstxt
-                                  keywordsops
-                                  specialchars
-                                  opchars
-                                  (basename ++ ".sl")
-                                  Nothing
-          let ((exprpp,proof), errors) = parse pRoot tokens
-          putStr (if null errors then "" else "Errors:\n" ++ errors)
-          putStr ("Result:\n" ++ (disp exprpp 140 ""))
-          writeFile (basename ++ ".tex") (disp proof 500 "")
-          putStr ("\nGenerated proof in file " ++ (basename ++ ".tex"))        
--}
-          
------------------------------------------------------------
--- A program is simply an expression.
------------------------------------------------------------
-program
-    = do{ whiteSpace
-        ; e <- expr
-        ; return e
-        }
-
-----------------------------------------------------------------
--- Declarations for types, identifiers and functions
-----------------------------------------------------------------
-decs
-    = many dec
-    
-dec 
-    = tydec
-    <|>
-      vardec
-    <|>
-      fundec
-
-----------------------------------------------------------------
--- Type declarations
--- int and string are predefined, but not reserved.
-----------------------------------------------------------------
-tydec :: Parser Declaration
-tydec
-    = do{ reserved "type"
-           ; tid  <- identifier
-           ; symbol "="
-           ; t <- ty
-           ; return (TypeDec tid t)
-           }
-
-ty
-    = do{ fields <- braces tyfields
-        ; return (Record fields)
-        }
-    <|>
-      do{ reserved "array"
-        ; reserved "of"
-        ; tid <- identifier
-        ; return (Array tid)
-        }
-    <|>
-      do{ id <- identifier
-        ; return (Var id) 
-        }
-          
-tyfields
-    = commaSep field
-
-noType = "*"
-voidType = "void"
-    
-field
-    = do{ id <- identifier
-        ; symbol ":"
-        ; tid <- identifier
-        ; return (TypedVar id tid)
-        }
-        
-----------------------------------------------------------------
--- identifier declarations
--- Lacks: 11, 12
-----------------------------------------------------------------
-vardec
-    = do{ reserved "var"
-        ; id <- identifier
-        ; t <- option noType (try (do{ symbol ":"
-                               ; identifier
-                               }))
-        ; symbol ":="
-        ; e <- expr
-        ; return (VarDec id t e)
-        }
-        
-----------------------------------------------------------------
--- Function declarations
-----------------------------------------------------------------
-fundec
-    = do{ reserved "function"
-        ; name <- identifier
-        ; parms <- parens tyfields
-        ; rettype <- option voidType (do{ symbol ":"
-                                        ; identifier
-                                        })
-        ; symbol "="
-        ; body <- expr
-        ; return (FunDec name parms rettype body)
-        }
-
-----------------------------------------------------------------
--- Lvalues
--- This may not be what we want. I parse lvalues as
--- a list of dot separated array indexings (where the indexing)
--- may be absent. Possibly, we'd want the . and [] 
-----------------------------------------------------------------
-
--- This combinator does ab* in a leftassociative way.
--- Applicable when you have a cfg rule with left recursion
--- which you might rewrite into EBNF X -> YZ*.
-lfact :: Parser a -> Parser (a -> a) -> Parser a
-lfact p q = do{ a <- p
-              ; fs <- many q
-              ; return (foldl  (\x f -> f x) a fs)
-              }              
-{-
-chainl op expr = lfact expr (do { o <- op
-                                ; e <- expr
-                                ; return (`o` e)
-                                })
-  -}                              
-lvalue = lfact variable (recordref <|> subscripted)
-
-recordref = do{ symbol "."
-              ; id <- variable
-              ; return (\x -> Dot x id)
-              }
-subscripted = do{ indexexpr <- brackets expr
-                ; return (\x -> Sub x indexexpr)
-                }
-        
-{-  Alternatively (an lvalue is then a sequence of, possibly (mutli-)indexed, identifiers separated by dots)
-lvalue :: Parser Expr
-lvalue = do{ flds <- sepBy1 subscripted (symbol ".")
-           ; return (if length flds < 2 then head flds else Dots flds)
-           }
-subscripted :: Parser Expr
-subscripted = do{ id <- identifier
-                ; indexes <- many (brackets expr)
-                ; return (if null indexes then Ident id 
-                                          else Subscripted id indexes)
-                }
--}
-
-----------------------------------------------------------------
--- All types of expression(s)
-----------------------------------------------------------------
-
-exprs = many expr
-
-expr :: Parser Expr
-expr = choice 
-       [ do{ reserved "break"
-           ; return Break
-           }
-       , ifExpr
-       , whileExpr
-       , forExpr
-       , letExpr 
-       , sequenceExpr       
-       , infixExpr
---       , sequenceExpr   -- I am not sure about this one.       
-       ]
-
-recordExpr :: Parser Expr
-recordExpr = do{ tid <- identifier
-               ; symbol "{"
-               ; fields <- commaSep1 fieldAssign
-               ; symbol "}"
-               ; return (RecordVal tid fields)
-               }
-
-fieldAssign :: Parser AssignField
-fieldAssign = do{ id <- identifier
-                ; symbol "="
-                ; e <- expr
-                ; return (AssignField id e)
-                }
-               
-arrayExpr :: Parser Expr
-arrayExpr = do{ tid <- identifier
-              ; size <- brackets expr
-              ; reserved "of"
-              ; initvalue <- expr
-              ; return (ArrayVal tid size initvalue)
-              }
-               
-assignExpr :: Parser Expr
-assignExpr = do{ lv <- lvalue 
-               ; symbol ":="
-               ; e <- expr
-               ; return (Assign lv e)
-               }
-
-ifExpr :: Parser Expr
-ifExpr = do{ reserved "if"
-             ; cond <- expr
-             ; reserved "then"
-             ; thenpart <- expr
-             ; elsepart <- option Skip (do{ reserved "else"; expr})
-             ; return (If cond thenpart elsepart)
-             }
-             
-whileExpr :: Parser Expr
-whileExpr = do{ reserved "while"
-              ; cond <- expr
-              ; reserved "do"
-              ; body <- expr
-              ; return (While cond body)
-              }
-
-forExpr :: Parser Expr
-forExpr = do{ reserved "for"
-            ; id <- identifier
-            ; symbol ":="
-            ; lowerbound <- expr
-            ; reserved "to"
-            ; upperbound <- expr
-            ; reserved "do"
-            ; body <- expr
-            ; return (For id lowerbound upperbound body)
-            }
-           
-letExpr :: Parser Expr
-letExpr = do{ reserved "let"
-            ; ds <- decs
-            ; reserved "in"
-            ; es <- semiSep expr
-            ; reserved "end"
-            ; return (Let ds es)
-            }
-
-sequenceExpr :: Parser Expr
-sequenceExpr = do{ exps <- parens (semiSep1 expr)
-                 ; return (if length exps < 2 then head exps else Seq exps)
-                 }
-
-infixExpr :: Parser Expr                 
-infixExpr = buildExpressionParser operators simpleExpr
-
-operators =
-    [ [ prefix "-"]
-    , [ op "*"  AssocLeft, op "/"  AssocLeft ]
-    , [ op "+"  AssocLeft, op "-"  AssocLeft ]
-    , [ op "=" AssocNone, op "<>" AssocNone, op "<="  AssocNone
-      , op "<" AssocNone, op ">="  AssocNone, op ">" AssocNone ]
-    , [ op "&" AssocRight ] -- Right for shortcircuiting
-    , [ op "|" AssocRight ] -- Right for shortcircuiting
-    , [ op ":=" AssocRight ]
-    ]
-    where
-      op name assoc   = Infix (do{ reservedOp name
-                                  ; return (\x y -> Op name x y) 
-                                  }) assoc
-      prefix name     = Prefix  (do{ reservedOp name
-                                  ; return (\x -> UnOp name x)
-                                  })                                  
-
-simpleExpr = choice [ do{ reserved "nil"
-                        ; return Nil
-                        }
-                    , intLiteral
-                    , strLiteral
-                    , parens expr
-                    , try funCallExpr
-                    , try recordExpr
-                    , try arrayExpr
-                    , lvalue
-                    ]
-
-funCallExpr = do{ id <- identifier
-                 ; parms <- parens (commaSep expr)
-                 ; return (Apply id parms)
-                 }
-
-intLiteral = do{ i <- integer; return (IntLit i) }
-strLiteral = do{ s <- stringLiteral; return (StringLit s) }
-variable = do{ id <- identifier
-             ; return (Ident id)
-             }
-             
-
------------------------------------------------------------
--- The lexer
------------------------------------------------------------
-lexer     = P.makeTokenParser tigerDef
-
-tigerDef  = javaStyle
-          { -- Kept the Java single line comments, but officially the language has no comments
-            P.reservedNames  = [ "array", "break", "do", "else", "end", "for", "function", 
-                                 "if", "in", "let", 
-                                 "nil", "of", "then", "to", "type", "var", "while" ]
-          , P.reservedOpNames= [ "<", "<=", ">", ">=", ":=", "+", "&", "-", "/"]
-          , P.opLetter       = oneOf (concat (P.reservedOpNames tigerDef))
-          , P.caseSensitive  = True   
-          }
-
-parens          = P.parens lexer    
-braces          = P.braces lexer    
-semiSep         = P.semiSep lexer  
-semiSep1        = P.semiSep1 lexer    
-commaSep        = P.commaSep lexer
-commaSep1       = P.commaSep1 lexer
-brackets        = P.brackets lexer
-whiteSpace      = P.whiteSpace lexer    
-symbol          = P.symbol lexer    
-identifier      = P.identifier lexer    
-reserved        = P.reserved lexer    
-reservedOp      = P.reservedOp lexer
-integer         = P.integer lexer    
-charLiteral     = P.charLiteral lexer    
-stringLiteral   = P.stringLiteral lexer    
diff --git a/Text/ParserCombinators/Parsec/examples/tiger/TigerAS.hs b/Text/ParserCombinators/Parsec/examples/tiger/TigerAS.hs
deleted file mode 100644 (file)
index 138ed2f..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-module TigerAS where
-
-type VarIdent = String
-type TypeIdent = String
-  
-data Declaration = TypeDec TypeIdent Type | VarDec VarIdent TypeIdent Expr | FunDec VarIdent [TypedVar] TypeIdent Expr
-  deriving (Eq, Show)
-  
-data TypedVar
-  = TypedVar VarIdent TypeIdent
-  deriving (Eq, Show)
-
-data Type
-  = Var TypeIdent
-  | Array TypeIdent
-  | Record [TypedVar]
-  deriving (Eq, Show)
-
-data Expr
-  = Sub Expr Expr
-  | Dot Expr Expr
-  | Apply VarIdent [Expr]
-  | Ident TypeIdent
-  | RecordVal TypeIdent [AssignField]
-  | ArrayVal TypeIdent Expr Expr
-  | IntLit Integer
-  | StringLit String
-  | While Expr Expr
-  | For VarIdent Expr Expr Expr
-  | If Expr Expr Expr
-  | Let [Declaration] [Expr]
-  | Assign Expr Expr
-  | Op String Expr Expr
-  | UnOp String Expr
-  | Skip
-  | Nil
-  | Break
-  | Seq [Expr]
-  deriving (Show, Eq)
-
-data AssignField 
-  = AssignField VarIdent Expr
-  deriving (Eq, Show)
diff --git a/Text/ParserCombinators/Parsec/examples/tiger/fac.tig b/Text/ParserCombinators/Parsec/examples/tiger/fac.tig
deleted file mode 100644 (file)
index 7e8e5b7..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-let function fact(n : int) : int = 
-      if n < 1 then 1 else (n * fact(n - 1))
- in fact(10)
-end
diff --git a/Text/ParserCombinators/Parsec/examples/tiger/matrix.tig b/Text/ParserCombinators/Parsec/examples/tiger/matrix.tig
deleted file mode 100644 (file)
index c48be3b..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-let
-
-type vec    = array of int
-type vector = {dim : int, d : vec}
-
-type mat    = array of vector
-type matrix = {x : int, y : int, d : mat}
-
-function vectorCreate(n : int) : vector =
-  vector{dim = n, d = vec[n] of 0}
-
-function vectorLiftedAdd(X : vector, Y : vector) : vector =
-  let var tmp : vector := vectorCreate(X.dim)
-   in for i := 0 to X.dim do
-        tmp.d[i] := X.d[i] + Y.d[i];
-      tmp
-  end
-
-function vectorLiftedMul(X : vector, Y : vector) : vector =
-  let var tmp : vector := vectorCreate(X.dim)
-   in for i := 0 to X.dim do
-        tmp.d[i] := X.d[i] * Y.d[i];
-      tmp
-  end
-
-function vectorInProduct(X : vector, Y : vector) : int =
-  let var tmp : int := 0
-   in for i := 0 to X.dim do
-        tmp := tmp + X.d[i] * Y.d[i];
-      tmp
-  end
-
-
-
-function matrixCreate(n : int, m : int) : matrix =
-  let var tmp := matrix{x = n, y = m, d = mat[n] of nil}
-   in for i := 0 to n do 
-        tmp.d[i] := vectorCreate(m);
-      tmp
-  end
-
-function matrixRow(A : matrix, i : int) : vector =
-  A.d[i]
-
-function matrixCol(A : matrix, j : int) : vector =
-  let var tmp := vectorCreate(A.y)
-   in for i := 0 to A.y do
-        tmp.d[i] := A.d[i].d[j];
-      tmp
-  end
-
-function matrixTranspose(A : matrix) : matrix =
-  let var tmp := matrixCreate(A.y, A.x)
-   in for i := 0 to A.x do
-        for j := 0 to A.y do
-          tmp.d[j].d[i] := A.d[i].d[j];
-      tmp
-  end
-
-function matrixLiftedAdd(A : matrix, B : matrix) : matrix =
-  let var tmp := matrixCreate(A.x, A.y)
-   in if A.x <> B.x | A.y <> B.y then exit(1)
-      else for i := 0 to A.x do
-             for j := 0 to A.y do
-               tmp.d[i].d[j] := A.d[i].d[j] + B.d[i].d[j];
-      tmp
-  end
-
-function matrixLiftedMul(A : matrix, B : matrix) : matrix =
-  let var tmp := matrixCreate(A.x, A.y)
-   in if A.x <> B.x | A.y <> B.y then exit(1)
-      else for i := 0 to A.x do
-             for j := 0 to A.y do
-               tmp.d[i].d[j] := A.d[i].d[j] * B.d[i].d[j];
-      tmp
-  end
-
-function matrixMul(A : matrix, B : matrix) : matrix =
-  let var tmp := matrixCreate(A.x, B.y)
-   in if A.y <> B.x then exit(1)
-      else for i := 0 to A.x do
-             for j := 0 to B.y do
-               tmp.d[i].d[j] := vectorInProduct(matrixRow(A,i), matrixCol(B,j));
-      tmp
-  end
-
-function createDiagMat(X : vector) : matrix =
-  let var tmp := matrixCreate(X.dim, X.dim)
-   in for i := 0 to X.dim do
-        tmp.d[i].d[i] := X.d[i];
-      tmp
-  end
-
-/* matrixMul(A, B) where B is a diagonal matrix, which can be represented
- by a vector
-*/
-
-function matrixMulDiag(A : matrix, X : vector) : matrix =
-  let var tmp := matrixCreate(A.x, A.y)
-   in if A.y <> X.dim then exit(1)
-      else for i := 0 to A.x do
-             for j := 0 to A.y do
-               tmp.d[i].d[j] := A.d[i].d[j] * X.d[j];
-      tmp
-  end
-
-/* Challenge: matrixMul(A, createDiagMat(X)) == matrixMulDiag(A, X)
-i.e., derive the rhs from the lhs by specialization
-
-What are the laws involved?
-
-Challenge: matrixMul(A, create5shapeMatrix(a,b,c,d,e)) == efficient algorithm
-
-*/
-
-in
-
-  /* matrixLiftedAdd(matrixCreate(8),matrixCreate(8)) */
-
-  matrixMul(A, createDiagMat(X))
-
-end
\ No newline at end of file
diff --git a/Text/ParserCombinators/Parsec/examples/tiger/merge.tig b/Text/ParserCombinators/Parsec/examples/tiger/merge.tig
deleted file mode 100644 (file)
index 3304748..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-let 
-
- type any = {any : int}
- var buffer := getchar()
-
- function readint(any: any) : int =
- let var i := 0
-     function isdigit(s : string) : int = 
-          ord(buffer)>=ord("0") & ord(buffer)<=ord("9")
-     function skipto() =
-       while buffer=" " | buffer="\n"
-         do buffer := getchar()
-  in skipto();
-     any.any := isdigit(buffer);
-     while isdigit(buffer)
-       do (i := i*10+ord(buffer)-ord("0"); buffer := getchar());
-     i
- end
-
- type list = {first: int, rest: list}
-
- function readlist() : list =
-    let var any := any{any=0}
-        var i := readint(any)
-     in if any.any
-         then list{first=i,rest=readlist()}
-         else nil
-    end
-
- function merge(a: list, b: list) : list =
-   if a=nil then b
-   else if b=nil then a
-   else if a.first < b.first 
-      then list{first=a.first,rest=merge(a.rest,b)}
-      else list{first=b.first,rest=merge(a,b.rest)}
-
- function printint(i: int) =
-  let function f(i:int) = if i>0 
-            then (f(i/10); print(chr(i-i/10*10+ord("0"))))
-   in if i<0 then (print("-"); f(-i))
-      else if i>0 then f(i)
-      else print("0")
-  end
-
- function printlist(l: list) =
-   if l=nil then print("\n")
-   else (printint(l.first); print(" "); printlist(l.rest))
-
-   var list1 := readlist()
-   var list2 := (buffer:=getchar(); readlist())
-
-
-  /* BODY OF MAIN PROGRAM */
- in printlist(merge(list1,list2))
-end
-
diff --git a/Text/ParserCombinators/Parsec/examples/tiger/queens.tig b/Text/ParserCombinators/Parsec/examples/tiger/queens.tig
deleted file mode 100644 (file)
index 621ec60..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-/* A program to solve the 8-queens problem */
-
-let
-    var N := 8
-
-    type intArray = array of int
-
-    var row := intArray [ N ] of 0
-    var col := intArray [ N ] of 0
-    var diag1 := intArray [N+N-1] of 0
-    var diag2 := intArray [N+N-1] of 0
-
-    function printboard() =
-       (for i := 0 to N-1
-        do (for j := 0 to N-1 
-             do print(if col[i]=j then " O" else " .");
-            print("\n"));
-         print("\n"))
-
-    function try(c:int) = 
-(    if c=N
-     then printboard()
-     else for r := 0 to N-1
-       do if row[r]=0 & diag1[r+c]=0 & diag2[r+7-c]=0
-             then (row[r]:=1; diag1[r+c]:=1; diag2[r+7-c]:=1;
-                   col[c]:=r;
-                   try(c+1);
-                   row[r]:=0; diag1[r+c]:=0; diag2[r+7-c]:=0)
-)
- in try(0)
-end
-       
diff --git a/Text/ParserCombinators/Parsec/examples/while/Main.hs b/Text/ParserCombinators/Parsec/examples/while/Main.hs
deleted file mode 100644 (file)
index d8efb82..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-{---------------------------------------------------------------
-Daan Leijen (c) 2001.  daan@cs.uu.nl
-
-$Revision: 1.1 $
-$Author: panne $
-$Date: 2002/05/31 12:22:35 $
----------------------------------------------------------------}
-module Main where
-
-import While( prettyWhileFromFile )
-
-main  = prettyWhileFromFile "fib.wh"
diff --git a/Text/ParserCombinators/Parsec/examples/while/While.hs b/Text/ParserCombinators/Parsec/examples/while/While.hs
deleted file mode 100644 (file)
index d686edc..0000000
+++ /dev/null
@@ -1,179 +0,0 @@
--------------------------------------------------------------
--- Parser for WHILE from Nielson, Nielson and Hankin
--- and various other sources.
--------------------------------------------------------------
-
-module While( prettyWhileFromFile ) where
-
-import WhileAS
-import Text.ParserCombinators.Parsec
-import Text.ParserCombinators.Parsec.Expr
-import qualified Text.ParserCombinators.Parsec.Token as P
-import Text.ParserCombinators.Parsec.Language( javaStyle )
-
-
-prettyWhileFromFile fname
-  = do{ input <- readFile fname
-      ; putStr input
-      ; case parse program fname input of
-           Left err -> do{ putStr "parse error at "
-                           ; print err
-                           }
-           Right x  -> print x
-      }
-
---renum :: Prog -> Prog
---renum p = rn (1,p)
---rn :: (Int, Stat) -> (Int, Stat)
---rn (x,s) = case s of
---            Assign vi ae _  -> (x+1,Assign vi ae x)
---            Skip _          -> (x+1, Skip x)
---            Seq [Stat]      -> 
---            If be _ s1 s2   -> do{ (newx, newthen) <- rn (x+1,s1)
---                                 ; (newerx, newelse) <- rn (newx,s2)
---                                 ; return (newerx, If be x newthen newelse)
---                                 }
---            While be _ s    -> do{ (newx, news) <- rn (x+1,s)
---                                 ; return (newx, While be x+1 news)
---                                 }
-
------------------------------------------------------------
--- A program is simply an expression.
------------------------------------------------------------
-program 
-    = do{ stats <- semiSep1 stat
-        ; return (if length stats < 2 then head stats else Seq stats)
-        }
-        
-stat :: Parser Stat
-stat = choice 
-       [ do { reserved "skip";
-              return (Skip 0)
-            }
-       , ifStat
-       , whileStat
-       , sequenceStat
-       , try assignStat
-       ]
-
-
-assignStat :: Parser Stat
-assignStat = do{ id <- identifier
-               ; symbol ":="
-               ; s <- aritExpr
-               ; return (Assign id s 0)
-               }
-
-ifStat :: Parser Stat
-ifStat = do{ reserved "if"
-             ; cond <- boolExpr
-             ; reserved "then"
-             ; thenpart <- stat
-             ; reserved "else"
-             ; elsepart <- stat
-             ; return (If cond 0 thenpart elsepart)
-             }
-             
-whileStat :: Parser Stat
-whileStat = do{ reserved "while"
-              ; cond <- boolExpr
-              ; reserved "do"
-              ; body <- stat
-              ; return (While cond 0 body)
-              }
-
-sequenceStat :: Parser Stat
-sequenceStat = do{ stats <- parens (semiSep1 stat)
-                 ; return (if length stats < 2 then head stats else Seq stats)
-                 }
-
-boolExpr:: Parser BExp
-boolExpr = buildExpressionParser boolOperators relExpr
-
-relExpr :: Parser BExp
-relExpr = do{ arg1 <- aritExpr
-            ; op <- choice [string "=", try (string "<>"), try (string "<="), string "<", try (string ">="), string ">"]
-            ; arg2 <- aritExpr
-            ; return (RelOp op arg1 arg2)
-            }
-
-aritExpr :: Parser AExp
-aritExpr = buildExpressionParser aritOperators simpleArit
-
--- Everything mapping bools to bools
-boolOperators =
-    [ [ prefix "not"]
-    , [ opbb "and" AssocRight ] -- right for shortcircuit
-    , [ opbb "or" AssocRight ] -- right for shortcircuit
-    ]
-    where
-      opbb name assoc   = Infix (do{ reservedOp name
-                                   ; return (\x y -> BOp name x y) 
-                                   }) assoc
-      prefix name       = Prefix  (do{ reservedOp name
-                                  ; return (\x -> BUnOp name x)
-                                  })                                      
-
--- Everything mapping pairs of ints to ints
-aritOperators =
-    [ [ op "*"  AssocLeft, op "/"  AssocLeft ]
-    , [ op "+"  AssocLeft, op "-"  AssocLeft ]
-    , [ op "&" AssocRight ] -- bitwise and delivering an int
-    , [ op "|" AssocRight ] -- bitwise or delivering an int
-    ]
-    where
-      op name assoc   = Infix (do{ reservedOp name
-                                  ; return (\x y -> AOp name x y) 
-                                  }) assoc
-
-
-simpleArit = choice [ intLiteral
-                    , parens aritExpr
-                    , variable
-                    ]
-
-simpleBool = choice [ boolLiteral
-                    , parens boolExpr
-                    ]
-
-boolLiteral = do{ reserved "false"
-               ; return (BoolLit True)
-               }
-             <|>  
-             do{ reserved "true"
-               ; return (BoolLit False)
-               }
-
-intLiteral = do{ i <- integer; return (IntLit i) }
-variable = do{ id <- identifier
-             ; return (Var id)
-             }
-             
-
------------------------------------------------------------
--- The lexer
------------------------------------------------------------
-lexer     = P.makeTokenParser whileDef
-
-whileDef  = javaStyle
-          { -- Kept the Java single line comments, but officially the language has no comments
-            P.reservedNames  = [ "true", "false", "do", "else", "not",
-                               "if", "then", "while", "skip"
-                               -- , "begin", "proc", "is", "end", "val", "res", "malloc" 
-                              ]
-          , P.reservedOpNames= [ "and", "or", "not", "<", "<=", ">", ">=", ":=", "+", "&", "-", "/"]
-          , P.opLetter       = oneOf (concat (P.reservedOpNames whileDef))
-          , P.caseSensitive  = False
-          }
-
-parens          = P.parens lexer    
-braces          = P.braces lexer    
-semiSep1        = P.semiSep1 lexer    
-whiteSpace      = P.whiteSpace lexer    
-symbol          = P.symbol lexer    
-identifier      = P.identifier lexer    
-reserved        = P.reserved lexer    
-reservedOp      = P.reservedOp lexer
-integer         = P.integer lexer    
-charLiteral     = P.charLiteral lexer    
-stringLiteral   = P.stringLiteral lexer    
diff --git a/Text/ParserCombinators/Parsec/examples/while/WhileAS.hs b/Text/ParserCombinators/Parsec/examples/while/WhileAS.hs
deleted file mode 100644 (file)
index fade981..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-module WhileAS where
-
-type  VarIdent = String
-type  Label = Int
--- type  Selector = String
-  
-type Prog = Stat
--- type Prog = Prog [Dec] [Stat]
-
--- Contains name, a list of input vars, output var, body respectively and of course
--- the two labels ln and lx
-data Dec = Proc [VarIdent] VarIdent VarIdent Label Stat Label
-
-data AExp 
-  = Var VarIdent 
-  | IntLit Integer
-  | AOp String AExp AExp
--- | Var  VarIdent (Maybe Selector)
--- | Nil
-  | Dummy
-  deriving (Eq, Show)
-  
-data BExp 
-  = BUnOp String BExp
-  | BoolLit Bool
-  | BOp String BExp BExp
-  | RelOp String AExp AExp
--- | POp VarIdent (Maybe Selector)
-  deriving (Eq, Show)
-
-data Stat
-  = Assign VarIdent AExp Label
-  | Skip Label
-  | Seq [Stat]
-  | If BExp Label Stat Stat
-  | While BExp Label Stat
--- | Call VarIdent [AExp] VarIdent Label Label
--- | Malloc VarIdent (Maybe Selector) Label
-  deriving (Show, Eq)
diff --git a/Text/ParserCombinators/Parsec/examples/while/fac.wh b/Text/ParserCombinators/Parsec/examples/while/fac.wh
deleted file mode 100644 (file)
index 12e87dd..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-y := x; z := 1; while y>1 do (z := z*y; y:=y-1); y:=0
-
diff --git a/Text/ParserCombinators/Parsec/examples/while/fib.wh b/Text/ParserCombinators/Parsec/examples/while/fib.wh
deleted file mode 100644 (file)
index 5abe13c..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-v := 1; 
-u := 1; 
-if n <= 2 then 
-  skip 
-else 
-  while n > 2 do (
-    t := u; 
-    u := v; 
-    v := u + t
-    )
-