From c3c4e43159a00761f1dbb88d8f197ac707815269 Mon Sep 17 00:00:00 2001 From: Michael Eden Date: Thu, 16 Nov 2017 18:17:23 -0500 Subject: [PATCH] Added function to turn java method into an implication graph. --- Logic.cabal | 2 ++ src/Logic/ImplicationGraph/JavaParser.hs | 24 ++++++++++++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 src/Logic/ImplicationGraph/JavaParser.hs diff --git a/Logic.cabal b/Logic.cabal index 7ca8481..43af031 100644 --- a/Logic.cabal +++ b/Logic.cabal @@ -27,6 +27,7 @@ library , Logic.ImplicationGraph.Safety , Logic.ImplicationGraph.Simplify , Logic.ImplicationGraph.JSONParser + , Logic.ImplicationGraph.JavaParser , Logic.Solver.Z3 , Data.Optic.Graph.Extras @@ -62,6 +63,7 @@ library , unordered-containers , vector , bytestring + , foldl default-language: Haskell2010 executable DualityExample diff --git a/src/Logic/ImplicationGraph/JavaParser.hs b/src/Logic/ImplicationGraph/JavaParser.hs new file mode 100644 index 0000000..d46185c --- /dev/null +++ b/src/Logic/ImplicationGraph/JavaParser.hs @@ -0,0 +1,24 @@ +module Logic.ImplicationGraph.JavaParser where + +import Data.Optic.Graph (Graph) +import Logic.ImplicationGraph (Edge, Vert) +import Logic.ImplicationGraph.JSONParser (parseGraphFromJSON, Line) + +import Text.Printf (printf) +import Data.Text.Encoding (encodeUtf8) +import Data.ByteString.Lazy (fromStrict) +import System.IO (FilePath) +import Control.Foldl as Foldl +import Control.Monad.Trans.Maybe + +import qualified Turtle + + +java2graph :: FilePath -> String -> MaybeT IO (Graph Line Edge Vert) +java2graph file method = do + json <- MaybeT $ Turtle.fold sh Foldl.head -- first line is the JSON data + MaybeT $ return $ parse json + where + parse = parseGraphFromJSON . fromStrict . encodeUtf8 . Turtle.lineToText + cmd = printf "java2graph print-implication -c '%s' -m '%s'" file method + sh = Turtle.inshell (Turtle.fromString cmd) Turtle.empty