]> ruin.nu Git - proglang.git/blob - CompInt.hs
smaller update
[proglang.git] / CompInt.hs
1 -- automatically generated by BNF Converter
2 module Main where
3
4
5 import IO ( stdin, hGetContents )
6 import System ( getArgs, getProgName )
7
8 import Lexsyntax
9 import Parsyntax
10 import Skelsyntax
11 import Printsyntax
12 import Abssyntax
13
14 import Typecheck
15 import Interpret
16 import Compile
17 import Data.Map as Map hiding (showTree)
18
19 import ErrM
20
21 type ParseFun a = [Token] -> Err a
22
23 myLLexer = myLexer
24
25
26 cHeader = "#include <stdio.h>\nint read(){\nint n;\nscanf(\"%d\",&n);\nreturn n;\n}\nint main(void){\n"
27
28 cFooter = "return 0;}"
29
30 putStrV :: Int -> String -> IO ()
31 putStrV v s = if v > 1 then putStrLn s else return ()
32
33 runFile :: ([Stm] -> IO()) -> ParseFun Stms -> FilePath -> IO ()
34 runFile e p f = readFile f >>= run e p
35
36 run :: ([Stm] -> IO()) -> ParseFun Stms -> String -> IO ()
37 run e p s = let ts = myLLexer s in case p ts of
38         Bad s    -> do
39                 putStrLn "\nParse              Failed...\n"
40                 putStrLn "Tokens:"
41                 putStrLn $ show ts
42                 putStrLn s
43         Ok (Program s) -> do
44                 typeCheck s
45                 e s
46
47 main :: IO ()
48 main = do 
49         args <- getArgs
50         case args of
51                 [] -> hGetContents stdin >>= run interpret pStms
52                 "-c":f:[] -> let file = (f++".c") in do
53                         putStrLn $ "Compiling "++f++" to the C99-compatible file:"++file
54                         runFile (writeFile file . compile)  pStms f
55                 f:[] -> runFile interpret pStms f
56                 _ -> do
57                         putStrLn "Usage: ./CompInt [-c] <file>"
58                         putStrLn "-c : compile <file> to C99-compatible file"