From f84fca3b169d808943b5f329c177870dc87c1d51 Mon Sep 17 00:00:00 2001 From: Camil Staps Date: Sat, 28 Jan 2023 12:48:43 +0100 Subject: Add stack simulator for compilation --- snug-clean/src/Snug/Compile/Simulate.dcl | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 snug-clean/src/Snug/Compile/Simulate.dcl (limited to 'snug-clean/src/Snug/Compile/Simulate.dcl') diff --git a/snug-clean/src/Snug/Compile/Simulate.dcl b/snug-clean/src/Snug/Compile/Simulate.dcl new file mode 100644 index 0000000..a61d631 --- /dev/null +++ b/snug-clean/src/Snug/Compile/Simulate.dcl @@ -0,0 +1,25 @@ +definition module Snug.Compile.Simulate + +from Control.Applicative import class Applicative, class pure, class <*> +from Control.Monad import class Monad +from Control.Monad.Identity import :: Identity, instance Functor Identity, + instance Monad Identity, instance pure Identity, instance <*> Identity +from Control.Monad.State import :: State, :: StateT, + instance Functor (StateT s m), instance Monad (StateT s m), + instance pure (StateT s m), instance <*> (StateT s m) +from Data.Functor import class Functor + +from MIPS.MIPS32 import :: Instruction, :: Label +from Snug.Syntax import :: BasicValue + +:: Simulator a :== State SimulationState a + +:: SimulationState + +simulate :: !(Simulator a) -> [Instruction] + +buildCons :: !Label !Int -> Simulator () + +pushBasicValue :: !BasicValue -> Simulator () + +indirectAndEval :: Simulator () -- cgit v1.2.3