packages feed

NXTDSL-0.3: Compiler.hs

import qualified NXT.AttoParser as P
import NXT.Types
import NXT.Inference

import System.Environment

main =
    do args <- getArgs
       case args of
         [filename] -> parseFile filename
         _ -> putStrLn "USAGE: ./Compiler [filename]"

parseFile f =
    do pResult <- P.parseFile f
       case pResult of
         Left errorMsg ->
             putStrLn $ "Error: " ++ errorMsg
         Right funDefs ->
             do inferredDefs <- runInference funDefs
                let cComment = "/* Generated by legoDSL. Don't touch! */"
                    cHeader = concatMap (prettyFD' False) inferredDefs
                    cCode = concatMap prettyFD inferredDefs
                    outFile = f ++ ".nxc"
                writeFile outFile $ (cComment ++ cHeader ++ cCode)
                putStrLn $ "Compiling ok. Generated " ++ outFile