summaryrefslogtreecommitdiff
path: root/src/Compare.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Compare.hs')
-rw-r--r--src/Compare.hs43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/Compare.hs b/src/Compare.hs
new file mode 100644
index 0000000..b60250f
--- /dev/null
+++ b/src/Compare.hs
@@ -0,0 +1,43 @@
+import System.Environment( getArgs )
+import Text.Printf
+import Library.Parse
+import Library.Semantic
+import qualified Library.Stack as Stack
+import qualified Data.Map as Map
+import qualified Data.Set as Set
+import Data.Maybe
+
+
+main = do
+ args <- getArgs
+ listA <- getLines (args!!0)
+ listB <- getLines (args!!1)
+
+ let result = do resultA <- eval (map stripReturn listA)
+ resultB <- eval (map stripReturn listB)
+ let (sA,dA,aA,tA) = resultA
+ (sB,dB,aB,tB) = resultB
+
+ sA_diff = Stack.diff sA sB
+ sB_diff = Stack.diff sB sA
+
+ dA_diff = dA Map.\\ dB
+ dB_diff = dB Map.\\ dA
+
+ aA_diff = aA Set.\\ aB
+ aB_diff = aB Set.\\ aA
+
+ tA_diff = tA Set.\\ tB
+ tB_diff = tB Set.\\ tA
+ return (Just (sA_diff,dA_diff,aA_diff,tA_diff),
+ Just (sB_diff,dB_diff,aB_diff,tB_diff))
+
+ output = if (isNothing result)
+ then "Error in article files\n"
+ else let (diff_A, diff_B) = fromJust result
+ in if (diff_A == diff_B)
+ then "Articles identical\n"
+ else (args!!0) ++ " has:\n" ++ (fromJust . machineToString $ diff_A) ++ "\n" ++
+ (args!!1) ++ " has:\n" ++ (fromJust . machineToString $ diff_B) ++ "\n"
+
+ printf output