diff options
author | Camil Staps | 2016-06-10 08:45:09 +0200 |
---|---|---|
committer | Camil Staps | 2016-06-10 08:45:09 +0200 |
commit | 09cf0f0791f8d05dbec240917e2010b161bb24f6 (patch) | |
tree | a5f5ac3d5f17d75bbe3171c3528307e81a9ec3d9 /Smurf.dcl | |
parent | LaTeX formatting for derivation trees (diff) |
Minimalistic prover
Diffstat (limited to 'Smurf.dcl')
-rw-r--r-- | Smurf.dcl | 30 |
1 files changed, 21 insertions, 9 deletions
@@ -8,36 +8,46 @@ from StdOverloaded import from GenEq import generic gEq -from Data.Maybe import ::Maybe +from Data.Maybe import ::Maybe(Nothing) from LaTeX import class toLaTeX -:: Stm = Push String +:: Expr = Lit String + | Var String + | ECat Expr Expr + | EHead Expr + | ETail Expr + | EQuotify Expr + +:: Stm = Push Expr | Input | Output | Cat | Head | Tail | Quotify | Put | Get | Exec :: Program :== [Stm] -:: Stack :== [String] -:: Store :== [(String, String)] +:: Stack :== [Expr] +:: Store :== [(Expr, Expr)] :: State = { stack :: Stack , store :: Store } -:: IO io = IO (io -> .(String, io)) (String io -> io) +:: IO io = IO (io -> .(Expr, io)) (Expr io -> io) -:: ListIO = { input :: [String] - , output :: [String] +:: ListIO = { input :: [Expr] + , output :: [Expr] } :: Transition = (-->) infix 1 (Program, Stack, State) (Stack, Stack, State) :: DerivationTree :== [Transition] -derive gEq Stm +derive gEq Stm, Expr, State instance == Stm +instance == Expr +instance == State + instance toString Stm instance toChar Stm instance fromChar Stm @@ -57,4 +67,6 @@ step :: !Program State u:io u:(IO u:io) -> u:(Maybe (!Program, State), u:io) run :: !Program State io (IO io) -> (Maybe State, io) listIO :: IO ListIO -tree :: !Program !State !ListIO (IO ListIO) -> Maybe DerivationTree +prover :: ((Program, Stack, State) -> Maybe (Stack, Stack, State)) + Program State ListIO (IO ListIO) -> Maybe DerivationTree +tree :== prover (\_ -> Nothing) |