git @ Cat's Eye Technologies Burro / rel_2_0_2025_0209
Add --tape-display-width option and update test cases. Chris Pressey a month ago
3 changed file(s) with 42 addition(s) and 38 deletion(s). Raw diff Collapse all Expand all
121121 >/
122122 ++++
123123 >)<
124 ===> State{ tape=(... [0] ...), stack=(... [0] ...), halt=True } ::: +--(++>/++++>)< [start] (pos: 0)
125 ===> State{ tape=(... [0] ...), stack=(... [0] ...), halt=True } ::: + (pos: 0)
126 ===> State{ tape=(... [1] ...), stack=(... [0] ...), halt=True } ::: - (pos: 0)
127 ===> State{ tape=(... [0] ...), stack=(... [0] ...), halt=True } ::: - (pos: 0)
128 ===> State{ tape=(... [-1] ...), stack=(... [0] ...), halt=True } ::: (++>/++++>) [test] (pos: 0)
129 ===> State{ tape=(... [0] ...), stack=(... 1 [0] ...), halt=True } ::: ++++> [else] (pos: 0)
130 ===> State{ tape=(... [0] ...), stack=(... 1 [0] ...), halt=True } ::: + (pos: 0)
131 ===> State{ tape=(... [1] ...), stack=(... 1 [0] ...), halt=True } ::: + (pos: 0)
132 ===> State{ tape=(... [2] ...), stack=(... 1 [0] ...), halt=True } ::: + (pos: 0)
133 ===> State{ tape=(... [3] ...), stack=(... 1 [0] ...), halt=True } ::: + (pos: 0)
134 ===> State{ tape=(... [4] ...), stack=(... 1 [0] ...), halt=True } ::: > (pos: 0)
135 ===> State{ tape=(... 4 [0] ...), stack=(... 1 [0] ...), halt=True } ::: ++++> [end-else] (pos: 1)
136 ===> State{ tape=(... 4 [1] ...), stack=(... [0] ...), halt=True } ::: < (pos: 1)
124 ===> +--(++>/++++>)<
125 ===> ... [0] ... (... [0] ...) [H] +
126 ===> ... [1] ... (... [0] ...) [H] -
127 ===> ... [0] ... (... [0] ...) [H] -
128 ===> ... [-1] ... (... [0] ...) [H] (++>/++++>)
129 ===> ... [0] ... (... 1 [0] ...) [H] [else] ++++>
130 ===> ... [0] ... (... 1 [0] ...) [H] [else] +
131 ===> ... [1] ... (... 1 [0] ...) [H] [else] +
132 ===> ... [2] ... (... 1 [0] ...) [H] [else] +
133 ===> ... [3] ... (... 1 [0] ...) [H] [else] +
134 ===> ... [4] ... (... 1 [0] ...) [H] [else] >
135 ===> ... 4 [1] ... (... [0] ...) [H] <
137136 ===> ::: HALT :::
138137 ===> ()
139138
143142 >/
144143 ++++
145144 >)<
146 ===> State{ tape=(... [0] ...), stack=(... [0] ...), halt=True } ::: +++++--(++>/++++>)< [start] (pos: 0)
147 ===> State{ tape=(... [0] ...), stack=(... [0] ...), halt=True } ::: + (pos: 0)
148 ===> State{ tape=(... [1] ...), stack=(... [0] ...), halt=True } ::: + (pos: 0)
149 ===> State{ tape=(... [2] ...), stack=(... [0] ...), halt=True } ::: + (pos: 0)
150 ===> State{ tape=(... [3] ...), stack=(... [0] ...), halt=True } ::: + (pos: 0)
151 ===> State{ tape=(... [4] ...), stack=(... [0] ...), halt=True } ::: + (pos: 0)
152 ===> State{ tape=(... [5] ...), stack=(... [0] ...), halt=True } ::: - (pos: 0)
153 ===> State{ tape=(... [4] ...), stack=(... [0] ...), halt=True } ::: - (pos: 0)
154 ===> State{ tape=(... [3] ...), stack=(... [0] ...), halt=True } ::: (++>/++++>) [test] (pos: 0)
155 ===> State{ tape=(... [0] ...), stack=(... -3 [0] ...), halt=True } ::: ++> [then] (pos: 0)
156 ===> State{ tape=(... [0] ...), stack=(... -3 [0] ...), halt=True } ::: + (pos: 0)
157 ===> State{ tape=(... [1] ...), stack=(... -3 [0] ...), halt=True } ::: + (pos: 0)
158 ===> State{ tape=(... [2] ...), stack=(... -3 [0] ...), halt=True } ::: > (pos: 0)
159 ===> State{ tape=(... 2 [0] ...), stack=(... -3 [0] ...), halt=True } ::: ++> [end-then] (pos: 1)
160 ===> State{ tape=(... 2 [-3] ...), stack=(... [0] ...), halt=True } ::: < (pos: 1)
145 ===> +++++--(++>/++++>)<
146 ===> ... [0] ... (... [0] ...) [H] +
147 ===> ... [1] ... (... [0] ...) [H] +
148 ===> ... [2] ... (... [0] ...) [H] +
149 ===> ... [3] ... (... [0] ...) [H] +
150 ===> ... [4] ... (... [0] ...) [H] +
151 ===> ... [5] ... (... [0] ...) [H] -
152 ===> ... [4] ... (... [0] ...) [H] -
153 ===> ... [3] ... (... [0] ...) [H] (++>/++++>)
154 ===> ... [0] ... (... -3 [0] ...) [H] [then] ++>
155 ===> ... [0] ... (... -3 [0] ...) [H] [then] +
156 ===> ... [1] ... (... -3 [0] ...) [H] [then] +
157 ===> ... [2] ... (... -3 [0] ...) [H] [then] >
158 ===> ... 2 [-3] ... (... [0] ...) [H] <
161159 ===> ::: HALT :::
162160 ===> ()
163161
1616 indents :: [String],
1717 tapePos :: Int,
1818 tapeChunkSize :: Int,
19 tapeDisplayWidth :: Int,
1920 burroState :: State
2021 }
2122
3031 dump :: Burro -> DebuggerM ()
3132 dump p = do
3233 ds <- get
33 liftIO $ putStrLn $ showState (burroState ds) (tapePos ds) (indents ds) (tapeChunkSize ds) p
34
35 showState (State tape stack halt) pos indents chunkSize p =
34 liftIO $ putStrLn $ showState (burroState ds) (tapePos ds) (indents ds) (tapeChunkSize ds) (tapeDisplayWidth ds) p
35
36 showState (State tape stack halt) pos indents tapeChunkSize tapeDisplayWidth p =
3637 let
37 tapes = ljust 60 $ showTape tape pos chunkSize
38 tapes = ljust tapeDisplayWidth $ showTape tape pos tapeChunkSize
3839 stacks = ljust 20 $ "(" ++ show stack ++ ")"
3940 halts = if halt then "[H]" else "[_]"
4041 desc = concat (map (\i -> i ++ " ") (reverse indents)) ++ show p
189190 True ->
190191 liftIO $ putStrLn "::: HALT :::"
191192
192 interpret :: Burro -> Int -> IO ()
193 interpret program tapeChunkSize = do
193 interpret :: Burro -> Int -> Int -> IO ()
194 interpret program tapeChunkSize tapeDisplayWidth = do
194195 let initialState = DebugState {
195196 indents = [],
196197 tapePos = 0,
197198 tapeChunkSize = tapeChunkSize,
199 tapeDisplayWidth = tapeDisplayWidth,
198200 burroState = newstate
199201 }
200202 flip evalStateT initialState $ do
1111
1212
1313 data Flags = Flags {
14 tapeChunkSize :: Int
14 tapeChunkSize :: Int,
15 tapeDisplayWidth :: Int
1516 } deriving (Show, Ord, Eq)
1617
1718 defaultFlags = Flags{
18 tapeChunkSize = 1
19 tapeChunkSize = 1,
20 tapeDisplayWidth = 20
1921 }
2022
2123 parseFlags flags ("--tape-chunk-size":n:rest) =
2224 parseFlags flags{ tapeChunkSize = read n } rest
25 parseFlags flags ("--tape-display-width":n:rest) =
26 parseFlags flags{ tapeDisplayWidth = read n } rest
2327 parseFlags flags other = (flags, other)
2428
2529
3539 putStrLn $ show $ interpret burroText
3640 ["debug", fileName] -> do
3741 burroText <- readFile fileName
38 state <- Debugger.interpret (parse burroText) (tapeChunkSize flags)
42 state <- Debugger.interpret (parse burroText) (tapeChunkSize flags) (tapeDisplayWidth flags)
3943 putStrLn $ show $ state
4044 ["compile-kondey", fileName] -> do
4145 kondeyText <- readFile fileName
4852 ["debug-kondey", fileName] -> do
4953 kondeyText <- readFile fileName
5054 let burroProg :: Burro = KondeyCompiler.compile kondeyText
51 state <- Debugger.interpret burroProg (tapeChunkSize flags)
55 state <- Debugger.interpret burroProg (tapeChunkSize flags) (tapeDisplayWidth flags)
5256 putStrLn $ show $ state
5357 _ -> do
5458 putStrLn $