From 07abaef2027a1c58a8e4f9e9d9c7d554ad924187 Mon Sep 17 00:00:00 2001
From: Duncan Ogilvie <mr.exodia.tpodt@gmail.com>
Date: Sun, 5 Nov 2017 14:56:46 +0100
Subject: [PATCH] Separate Model structure from parser

---
 .gitignore                  |  2 ++
 src/ModelParser/Model.hs    | 14 ++++++++++++++
 src/ModelParser/Parser.y    | 18 ++++--------------
 src/SimpleFormulaChecker.hs |  1 +
 4 files changed, 21 insertions(+), 14 deletions(-)
 create mode 100644 src/ModelParser/Model.hs

diff --git a/.gitignore b/.gitignore
index 5678842..35ad64d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,3 +2,5 @@ tests/org/
 *.hi
 *.o
 .DS_Store
+/src/ModelParser/Lexer.hs
+/src/ModelParser/Parser.hs
diff --git a/src/ModelParser/Model.hs b/src/ModelParser/Model.hs
new file mode 100644
index 0000000..0e5cfd0
--- /dev/null
+++ b/src/ModelParser/Model.hs
@@ -0,0 +1,14 @@
+module ModelParser.Model where
+
+data FuncInst = InstInt Int Int
+              | InstElse Int
+              deriving (Show, Read, Eq)
+
+data ModelVal = BoolVal Bool
+              | IntVal Int
+              | ArrayRef String -- TODO: immediately forward to ArrayFunc?
+              | ArrayAsConst Int -- TODO: parse to InstElse?
+              | ArrayFunc [FuncInst]
+              deriving (Show, Read, Eq)
+
+type Z3Model = [(String, ModelVal)]
\ No newline at end of file
diff --git a/src/ModelParser/Parser.y b/src/ModelParser/Parser.y
index 20b05a7..c9b1576 100644
--- a/src/ModelParser/Parser.y
+++ b/src/ModelParser/Parser.y
@@ -1,7 +1,8 @@
 {
-module ModelParser.Parser where
+module ModelParser.Parser (parseModel) where
 
 import ModelParser.Lexer
+import ModelParser.Model
 }
 
 %name happyParseTokens
@@ -46,22 +47,11 @@ FuncEntry : value "->" value { InstInt $1 $3 }
           | value { InstElse $1 }
 
 {
-data FuncInst = InstInt Int Int
-              | InstElse Int
-              deriving (Show, Read, Eq)
-
-data ModelVal = BoolVal Bool
-              | IntVal Int
-              | ArrayRef String -- TODO: immediately forward to ArrayFunc?
-              | ArrayAsConst Int -- TODO: parse to InstElse?
-              | ArrayFunc [FuncInst]
-              deriving (Show, Read, Eq)
-
-type Z3Model = [(String, ModelVal)]
 
 parseError :: [Token] -> a
-parseError t = error $ "Parse error" ++ show t
+parseError t = error $ "Model parse error " ++ show t
 
 parseModel :: String -> Z3Model
 parseModel = happyParseTokens . alexScanTokens
+
 }
\ No newline at end of file
diff --git a/src/SimpleFormulaChecker.hs b/src/SimpleFormulaChecker.hs
index 778ddef..fae4e58 100644
--- a/src/SimpleFormulaChecker.hs
+++ b/src/SimpleFormulaChecker.hs
@@ -18,6 +18,7 @@ import LogicIR.Backend.Pretty
 import LogicIR.Backend.Null
 
 import ModelParser.Parser
+import ModelParser.Model
 
 import Control.Monad.Trans (liftIO)
 
-- 
GitLab