[project @ 2003-07-31 17:45:22 by ross]
[ghc-base.git] / Text / ParserCombinators / Parsec / examples / UserGuide / Main.hs
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
-               
-