summaryrefslogtreecommitdiff
path: root/Assignment2
diff options
context:
space:
mode:
authorCamil Staps2018-07-06 11:12:03 +0200
committerCamil Staps2018-07-06 11:14:23 +0200
commitfdcc5373160d2d522ecd9a1b8e1dde0d782605e2 (patch)
treecece8d2c8a49f530ba8f8c77ef928031271201c0 /Assignment2
parentProvide initial description of the implementation (diff)
This is so ugly
Diffstat (limited to 'Assignment2')
-rw-r--r--Assignment2/src/DTMC.icl18
-rw-r--r--Assignment2/src/Dockerfile2
-rw-r--r--Assignment2/src/Expression.dcl8
-rw-r--r--Assignment2/src/Expression.icl51
-rwxr-xr-xAssignment2/src/entry.sh3
5 files changed, 77 insertions, 5 deletions
diff --git a/Assignment2/src/DTMC.icl b/Assignment2/src/DTMC.icl
index 6c81510..1d9bafd 100644
--- a/Assignment2/src/DTMC.icl
+++ b/Assignment2/src/DTMC.icl
@@ -16,6 +16,7 @@ import Data.List
import qualified Data.Map as M
from Data.Map import :: Map, alter
import Data.Maybe
+import System.CommandLine
import System.File
import System.FilePath
import Text
@@ -169,8 +170,8 @@ printDTMC dtmc=:{nr_states,states}
# (state_strings,states) = printStates 0 states
# s = join "\n"
[ "@type: DTMC"
- , "@parameters"
- , "@reward_models"
+ , "@parameters\n"
+ , "@reward_models\n"
, "@nr_states"
, toString nr_states
, "@model"
@@ -213,7 +214,16 @@ where
addVar f t (Just fn) = Just ("((" <+ fn <+ ") + v" <+ f <+ "_" <+ t <+ ")")
Start w
-# (dtmc,w) = parseDTMC "die.drn" w
+# ([prog:args],w) = getCommandLine w
+| length args <> 2
+ # (io,w) = stdio w
+ # io = io <<< "Usage: " <<< prog <<< " DRN_IN DRN_OUT\n"
+ # (_,w) = fclose io w
+ = w
+# [drn_in,drn_out:_] = args
+# (dtmc,w) = parseDTMC drn_in w
# dtmc = addVars dtmc
# dtmc = stateElimination dtmc
-= printDTMC dtmc
+# (dtmcs,dtmc) = printDTMC dtmc
+# (_,w) = writeFile drn_out dtmcs w
+= w
diff --git a/Assignment2/src/Dockerfile b/Assignment2/src/Dockerfile
index ecdbab0..4bec59e 100644
--- a/Assignment2/src/Dockerfile
+++ b/Assignment2/src/Dockerfile
@@ -24,4 +24,4 @@ RUN apt-get update -qq &&\
ENV CLEAN_HOME=/opt/clean
ENV PATH=$PATH:/opt/storm/build/bin:/opt/clean/bin:/opt/clean/exe
-ENTRYPOINT cd /src; bash
+ENTRYPOINT /src/entry.sh
diff --git a/Assignment2/src/Expression.dcl b/Assignment2/src/Expression.dcl
new file mode 100644
index 0000000..d462eb9
--- /dev/null
+++ b/Assignment2/src/Expression.dcl
@@ -0,0 +1,8 @@
+definition module Expression
+
+from StdOverloaded import class toString
+
+:: Expression
+
+parseInfix :: !String -> Expression
+instance toString Expression // prefix
diff --git a/Assignment2/src/Expression.icl b/Assignment2/src/Expression.icl
new file mode 100644
index 0000000..7622103
--- /dev/null
+++ b/Assignment2/src/Expression.icl
@@ -0,0 +1,51 @@
+implementation module Expression
+
+from StdChar import instance == Char
+from StdOverloaded import class toString(toString)
+from StdString import instance toString {#Char}, instance toString Int, instance toString Real
+
+import Data._Array
+from Data.Func import $
+import Data.Maybe
+import Text
+import Text.GenParse
+
+:: Expression
+ = (+) infixl 6 !Expression !Expression
+ | (-) infixl 6 !Expression !Expression
+ | (*) infixl 7 !Expression !Expression
+ | (/) infixl 7 !Expression !Expression
+ | LitInt !Int
+ | LitReal !Real
+ | Var !String
+
+derive gParse Expression
+
+parseInfix :: !String -> Expression
+parseInfix s = fromJust $ gParse{|*|} $ addLiteralBoxes $ preParseString s
+where
+ addLiteralBoxes :: !Expr -> Expr
+ addLiteralBoxes e = case e of
+ ExprInt i -> ExprApp {ExprIdent "LitInt",e}
+ ExprReal r -> ExprApp {ExprIdent "LitReal",e}
+
+ ExprIdent id | id.[0] == 'v'
+ -> ExprApp {ExprIdent "Var",ExprString id}
+
+ ExprApp es -> ExprApp (mapArray addLiteralBoxes es)
+ ExprTuple es -> ExprTuple (mapArray addLiteralBoxes es)
+ ExprAppInInfix es x y z
+ -> ExprAppInInfix (mapArray addLiteralBoxes es) x y z
+
+ _ -> e
+
+instance toString Expression
+where
+ toString e = case e of
+ (e1 + e2) -> "(+ " <+ e1 <+ " " <+ e2 <+ ")"
+ (e1 - e2) -> "(- " <+ e1 <+ " " <+ e2 <+ ")"
+ (e1 * e2) -> "(* " <+ e1 <+ " " <+ e2 <+ ")"
+ (e1 / e2) -> "(/ " <+ e1 <+ " " <+ e2 <+ ")"
+ LitInt i -> toString i
+ LitReal r -> toString r
+ Var v -> v
diff --git a/Assignment2/src/entry.sh b/Assignment2/src/entry.sh
new file mode 100755
index 0000000..3702ac5
--- /dev/null
+++ b/Assignment2/src/entry.sh
@@ -0,0 +1,3 @@
+cd /src
+clm -ms -IL Platform -nr -nt DTMC -o dtmc
+bash