module DSL.StdLib (stdlib) where import Data.Map.Strict (fromList) import DSL.Types import DSL.BaseParsers (parse, mult, chain) import DSL.Parsing (tokenizer, procP) stdlib :: ProcTable stdlib = procs where p = tokenizer `chain` mult procP procs = case parse p (unlines sources) of Nothing -> error "Failed to parse standard library" Just (_, ps) -> fromList ps sources :: [String] sources = [ div' , mod' , lteq , gteq , neq ] 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"