module DSL.StdLib (stdlib) where import Data.Map.Strict (fromList) import DSL.Types import DSL.BaseParsers (parse, mult, chain, nicePrintParserError) import DSL.Parsing (tokenizer, procP) stdlib :: ProcTable stdlib = procs where p = tokenizer `chain` mult procP m = "Failed to parse standard library:\n" procs = case parse p (unlines sources) of Right (_, ps) -> fromList ps Left e -> error $ m ++ nicePrintParserError e sources :: [String] sources = [ div' , mod' , lteq , gteq , neq , putLn ] div' :: String div' = "PROC / /% DROP END" mod' :: String mod' = "PROC % /% SWAP DROP END" lteq :: String lteq = "PROC <= OVER OVER == ROT < || END" gteq :: String gteq = "PROC >= OVER OVER == ROT > || END" neq :: String neq = "PROC != == ! END" putLn :: String putLn = "PROC PUTLN PUT \"\n\" PUT END"