-- Copyright (c) 2020-2025, Chris Pressey, Cat's Eye Technologies.
-- This file is distributed under a 2-clause BSD license, see LICENSES/ dir.
-- SPDX-License-Identifier: LicenseRef-BSD-2-Clause-X-Burro
module Main where
import System.Environment
import Language.Burro.Definition
import qualified Language.Burro.Debugger as Debugger
import qualified Language.Kondey.Compiler as KondeyCompiler
data Flags = Flags {
tapeChunkSize :: Int,
tapeDisplayWidth :: Int
} deriving (Show, Ord, Eq)
defaultFlags = Flags{
tapeChunkSize = 1,
tapeDisplayWidth = 20
}
parseFlags flags ("--tape-chunk-size":n:rest) =
parseFlags flags{ tapeChunkSize = read n } rest
parseFlags flags ("--tape-display-width":n:rest) =
parseFlags flags{ tapeDisplayWidth = read n } rest
parseFlags flags other = (flags, other)
main = do
args <- getArgs
let (flags, args') = parseFlags defaultFlags args
case args' of
["parse", fileName] -> do
burroText <- readFile fileName
putStrLn $ show $ parse burroText
["run", fileName] -> do
burroText <- readFile fileName
putStrLn $ show $ interpret burroText
["debug", fileName] -> do
burroText <- readFile fileName
state <- Debugger.interpret (parse burroText) (tapeChunkSize flags) (tapeDisplayWidth flags)
putStrLn $ show $ state
["compile-kondey", fileName] -> do
kondeyText <- readFile fileName
let burroProg :: Burro = KondeyCompiler.compile kondeyText
putStrLn $ show $ burroProg
["run-kondey", fileName] -> do
kondeyText <- readFile fileName
let burroProg :: Burro = KondeyCompiler.compile kondeyText
putStrLn $ show $ run burroProg newstate
["debug-kondey", fileName] -> do
kondeyText <- readFile fileName
let burroProg :: Burro = KondeyCompiler.compile kondeyText
state <- Debugger.interpret burroProg (tapeChunkSize flags) (tapeDisplayWidth flags)
putStrLn $ show $ state
_ -> do
putStrLn $
"Usage:\n" ++
" burro run <filename.burro>\n" ++
" burro debug <filename.burro>\n" ++
" burro compile-kondey <filename.kondey>\n" ++
" burro run-kondey <filename.kondey>\n" ++
" burro debug-kondey <filename.kondey>\n"