[auto
ekmett@gmail.com**20090504075256
Ignore-this: 84f29ed4e108b378509af53c968519b0
] {
addfile ./doc/html/parsimony/Text-Parsimony-Interpreter-Parsec.html
addfile ./doc/html/parsimony/src/Text-Parsimony-Interpreter-Parsec.html
hunk ./doc/html/parsimony/Text-Parsimony-Interpreter-Parsec.html 1
+
+
+
Text.Parsimony.Interpreter.Parsec |
Text.Parsimony.Interpreter.Parsec | Portability | non-portable (type families) | Stability | experimental | Maintainer | ekmett@gmail.com |
|
|
|
Description |
A minimalist interpreter that evaluates a Parsimony parser with Parsec
+ |
|
|
Documentation |
|
|
|
|
|
Produced by Haddock version 2.3.0 |
hunk ./doc/html/parsimony/doc-index.html 228
->Text.Parsimony.ParsecText.Parsimony.Interpreter.ParsecText.Parsimony.ParsecText.Parsimony.Interpreter.ParsecText.Parsimony.Mode | Interpreter | | | |
Text.Parsimony.ParsecText.Parsimony.Mode
+
+
+
+Text/Parsimony/Interpreter/Parsec.hs
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module Text.Parsimony.Interpreter.Parsec where
+
+import Control.Applicative
+import Text.Parsimony.Prim
+import Text.Parsimony.Util
+import Text.Parsec as Parsec
+
+eval :: Parsec.Stream s m Char => Parser Parsing Char e -> Parsec.ParsecT s u m e
+eval expr = case expr of
+ App f x -> eval f <*> eval x
+ Pure (Id a) -> pure a
+ Alt as -> Parsec.choice (Parsec.try . eval <$> as)
+ Greedy as -> Parsec.choice (eval <$> as)
+ Satisfy f p -> f <$> Parsec.satisfy p
+ Name n _ -> eval n
+ Labels l ls -> Parsec.labels (eval l) ls
+ Skip s -> eval_ s
+
+eval_ :: (Mode mode, Parsec.Stream s m Char) => Parser mode Char e -> Parsec.ParsecT s u m ()
+eval_ expr = case expr of
+ App f x -> eval_ f >> eval_ x
+ Pure _ -> pure ()
+ Alt as -> Parsec.choice (Parsec.try . eval_ <$> as)
+ Greedy as -> Parsec.choice (eval_ <$> as)
+ Satisfy _ p -> () <$ Parsec.satisfy p
+ Name p _ -> eval_ p
+ Labels p ls -> Parsec.labels (eval_ p) ls
+ Skip p -> eval_ p
+
+
}