aboutsummaryrefslogtreecommitdiffstats
path: root/src/Verismith/CounterEg.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Verismith/CounterEg.hs')
-rw-r--r--src/Verismith/CounterEg.hs105
1 files changed, 54 insertions, 51 deletions
diff --git a/src/Verismith/CounterEg.hs b/src/Verismith/CounterEg.hs
index a2e1210..f378baf 100644
--- a/src/Verismith/CounterEg.hs
+++ b/src/Verismith/CounterEg.hs
@@ -1,44 +1,44 @@
-{-|
-Module : Verismith.CounterEg
-Description : Counter example parser to load the counter example
-Copyright : (c) 2019, Yann Herklotz
-License : GPL-3
-Maintainer : yann [at] yannherklotz [dot] com
-Stability : experimental
-Portability : POSIX
--}
-
+-- |
+-- Module : Verismith.CounterEg
+-- Description : Counter example parser to load the counter example
+-- Copyright : (c) 2019, Yann Herklotz
+-- License : GPL-3
+-- Maintainer : yann [at] yannherklotz [dot] com
+-- Stability : experimental
+-- Portability : POSIX
module Verismith.CounterEg
- ( CounterEg(..)
- , parseCounterEg
- )
+ ( CounterEg (..),
+ parseCounterEg,
+ )
where
-import Control.Applicative ((<|>))
-import Data.Bifunctor (bimap)
-import Data.Binary (encode)
-import Data.Bits (shiftL, (.|.))
-import Data.ByteString (ByteString)
-import qualified Data.ByteString as B
+import Control.Applicative ((<|>))
+import Data.Bifunctor (bimap)
+import Data.Binary (encode)
+import Data.Bits ((.|.), shiftL)
+import Data.ByteString (ByteString)
+import qualified Data.ByteString as B
import qualified Data.ByteString.Lazy as L
-import Data.Char (digitToInt)
-import Data.Functor (($>))
-import Data.Maybe (listToMaybe)
-import Data.Text (Text)
-import qualified Data.Text as T
-import Numeric (readInt)
-import qualified Text.Parsec as P
-
-data CounterEg = CounterEg { _counterEgInitial :: ![(Text, Text)]
- , _counterEgStates :: ![[(Text, Text)]]
- }
- deriving (Eq, Show)
+import Data.Char (digitToInt)
+import Data.Functor (($>))
+import Data.Maybe (listToMaybe)
+import Data.Text (Text)
+import qualified Data.Text as T
+import Numeric (readInt)
+import qualified Text.Parsec as P
+
+data CounterEg
+ = CounterEg
+ { _counterEgInitial :: ![(Text, Text)],
+ _counterEgStates :: ![[(Text, Text)]]
+ }
+ deriving (Eq, Show)
instance Semigroup CounterEg where
- CounterEg a b <> CounterEg c d = CounterEg (a <> c) (b <> d)
+ CounterEg a b <> CounterEg c d = CounterEg (a <> c) (b <> d)
instance Monoid CounterEg where
- mempty = CounterEg mempty mempty
+ mempty = CounterEg mempty mempty
type Parser = P.Parsec String ()
@@ -57,11 +57,12 @@ type Parser = P.Parsec String ()
-- convertBinary = fromBytes . convert
lexme :: Parser a -> Parser a
-lexme f = do { a <- f; _ <- P.spaces; return a }
+lexme f = do a <- f; _ <- P.spaces; return a
nameChar :: Parser Char
-nameChar = P.alphaNum
- <|> P.oneOf "$.:_"
+nameChar =
+ P.alphaNum
+ <|> P.oneOf "$.:_"
parens :: Parser a -> Parser a
parens = lexme . P.between (P.char '(') (P.char ')')
@@ -74,39 +75,41 @@ trueOrFalse = lexme $ (P.string "true" $> "1") <|> (P.string "false" $> "0")
assumeBody :: Parser (String, String)
assumeBody = lexme $ do
- name <- P.char '=' *> P.spaces *> brackets (P.many1 nameChar)
- num <- P.spaces *> ((P.string "#b" *> P.many1 P.digit) <|> trueOrFalse)
- return (name, num)
+ name <- P.char '=' *> P.spaces *> brackets (P.many1 nameChar)
+ num <- P.spaces *> ((P.string "#b" *> P.many1 P.digit) <|> trueOrFalse)
+ return (name, num)
parseAssume :: Parser (String, String)
parseAssume = lexme $ P.string "assume" *> P.spaces *> parens assumeBody
parseInitial :: Parser [(String, String)]
parseInitial = lexme $ do
- _ <- lexme $ P.string "initial"
- P.many parseAssume
+ _ <- lexme $ P.string "initial"
+ P.many parseAssume
parseState :: Parser (String, [(String, String)])
parseState = lexme $ do
- n <- lexme $ P.string "state" *> P.spaces *> P.many1 P.digit
- assumes <- P.many parseAssume
- return (n, assumes)
+ n <- lexme $ P.string "state" *> P.spaces *> P.many1 P.digit
+ assumes <- P.many parseAssume
+ return (n, assumes)
parseCE :: Parser [[(String, String)]]
parseCE = lexme $ do
- i <- parseInitial
- other <- fmap snd <$> P.many parseState
- return (i : other)
+ i <- parseInitial
+ other <- fmap snd <$> P.many parseState
+ return (i : other)
cEtoCounterEg :: [[(String, String)]] -> CounterEg
cEtoCounterEg [] = mempty
-cEtoCounterEg (i : is) = CounterEg (bimap T.pack T.pack <$> i)
- (fmap (bimap T.pack T.pack) <$> is)
+cEtoCounterEg (i : is) =
+ CounterEg
+ (bimap T.pack T.pack <$> i)
+ (fmap (bimap T.pack T.pack) <$> is)
parseCounterEg' :: Parser CounterEg
parseCounterEg' = lexme $ do
- _ <- P.spaces
- cEtoCounterEg <$> parseCE
+ _ <- P.spaces
+ cEtoCounterEg <$> parseCE
parseCounterEg :: Text -> Either String CounterEg
parseCounterEg = bimap show id . P.parse parseCounterEg' "" . T.unpack