####### DOCUMENTATIATOIAITAT ION ######## Usage: ./CompInt [-c] [file] -c : Compile [file], interprets if it isn't specified if no arguments are specified then the file is interpreted Files: Interpret.hs: Handles the interpretation of a program Compile.hs: Compiles the program into a c program Typechecker.hs: Simple modification of the bnfc-generated Testsyntax which calls the type-checking functions. Typecheck.hs: Contains the type-checking functions typeCheckExp, typeCheckVar and typeCheckStm and some utility functions, responsible for the entire type-checking process. Abssyntax.hs, Parsyntax.y, Lexsyntax.x,ErrM.hs,Printsyntax.hs,Skelsyntax.hs: The files generated by bnfc, only modification is the removal of the Bool type in Abssyntx.hs so haskell's internal type can be used. Additions which comes from the extension: typing rules ++++++++++++ [EFunc] (t is used for types, T is the context, and + is used for in) T+ i (es) : t <= i(ts):t in T & T+ es:ts The functioncall of i returns t if i is in the context with returntype t and the types of the argument expressions matches those in the parameter list [SReturn] T+ return e <= e:t & ret(t) in T return typechecks if e returns the same type as the current context [Func] T+ t i (ds) ss <= T,novariables,ret(t),ds => T' & T'+ss & last(ss) => return:t the function i typechecks if the body typechecks in the context where all other variables has been removed and the return type and paramters has been added and that the last statement is a return with the right type semantic rules ++++++++++++ (v is used for values, e for expressions, s for statements, c is the context)