[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
 parsimony-0.0.1: Monoidal parser combinators for parallel parsing of context-free languagesSource codeContentsIndex
Text.Parsimony.Interpreter.Parsec
Portabilitynon-portable (type families)
Stabilityexperimental
Maintainerekmett@gmail.com
Description
A minimalist interpreter that evaluates a Parsimony parser with Parsec +
Documentation
eval :: Stream s m Char => Parser Parsing Char e -> ParsecT s u m eSource
eval_ :: (Mode mode, Stream s m Char) => Parser mode Char e -> ParsecT s u m ()Source
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.Modeshow/hideInterpreter
Text.Parsimony.Interpreter.Parsec
Text.Parsimony.ParsecText.Parsimony.Mode + + + +Text/Parsimony/Interpreter/Parsec.hs + + + +
{-# LANGUAGE FlexibleContexts #-}
+-----------------------------------------------------------------------------
+-- |
+-- Module      :  Text.Parsimony.Interpreter.Parsec
+-- Copyright   :  (c) Edward Kmett 2009
+-- License     :  BSD
+-- Maintainer  :  ekmett@gmail.com
+-- Stability   :  experimental
+-- Portability :  non-portable (type families)
+--
+-- A minimalist interpreter that evaluates a Parsimony parser with Parsec
+--
+-----------------------------------------------------------------------------
+
+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 -- unexpected Skip in Skip
+
+ }