summaryrefslogtreecommitdiff
path: root/Source/Jennisys/Jennisys.fs
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Jennisys/Jennisys.fs')
-rw-r--r--Source/Jennisys/Jennisys.fs72
1 files changed, 72 insertions, 0 deletions
diff --git a/Source/Jennisys/Jennisys.fs b/Source/Jennisys/Jennisys.fs
new file mode 100644
index 00000000..b10c9cfc
--- /dev/null
+++ b/Source/Jennisys/Jennisys.fs
@@ -0,0 +1,72 @@
+// This project type requires the F# PowerPack at http://fsharppowerpack.codeplex.com/releases
+// Learn more about F# at http://fsharp.net
+// Original project template by Jomo Fisher based on work of Brian McNamara, Don Syme and Matt Valerio
+// This posting is provided "AS IS" with no warranties, and confers no rights.
+module Main
+
+open System
+open System.IO
+open Microsoft.FSharp.Text.Lexing
+
+open Ast
+open AstUtils
+open Lexer
+open Options
+open Parser
+open Printer
+open TypeChecker
+open Analyzer
+
+let readAndProcess (filename: string) =
+ printfn "// Jennisys, Copyright (c) 2011, Microsoft."
+ // lex
+ let f = if filename = null then Console.In else new StreamReader(filename) :> TextReader
+ let lexbuf = LexBuffer<char>.FromTextReader(f)
+ lexbuf.EndPos <- { pos_bol = 0;
+ pos_fname=if filename = null then "stdin" else filename;
+ pos_cnum=0;
+ pos_lnum=1 }
+
+ let sprog =
+ try
+ // parse
+ Parser.start Lexer.tokenize lexbuf
+ with
+ | ex ->
+ let pos = lexbuf.EndPos
+ printfn " [PARSE ERROR]: %s(%d,%d): %s" pos.FileName pos.Line pos.Column ex.Message
+ Environment.Exit(1)
+ failwith ""
+ match TypeCheck sprog with
+ | None -> () // errors have already been reported
+ | Some(prog) ->
+ Analyze prog filename
+
+
+try
+ let args = Environment.GetCommandLineArgs()
+ ParseCmdLineArgs (List.ofArray args |> List.tail)
+ if CONFIG.breakIntoDebugger then ignore (System.Diagnostics.Debugger.Launch()) else ()
+ if CONFIG.help then
+ printfn "%s" PrintHelpMsg
+ else
+ if CONFIG.inputFilename = "" then
+ printfn "*** Error: No input file was specified."
+ else
+ readAndProcess CONFIG.inputFilename
+with
+ | InvalidCmdLineOption(msg)
+ | InvalidCmdLineArg(msg) as ex ->
+ printfn " [ERROR] %s" msg;
+ printfn "%s" PrintHelpMsg
+ | EvalFailed(msg) as ex ->
+ printfn " [EVALUATION ERROR] %s" msg
+ printfn "%O" ex.StackTrace
+
+//let mc = MethodOutSelect (MethodCall(IdLiteral("left"),"SetNode","Find",[VarLiteral("n")]), "ret")
+//let expr = BinaryOr (BinaryOr (BinaryEq (VarLiteral("a")) (VarLiteral("b"))) mc) (mc)
+//printfn "%s" (PrintExpr 0 expr)
+//printfn ""
+//
+//let stmt = ExprStmt(expr)
+//printfn "%s" (DafnyPrinter.PrintStmt stmt 0 false) \ No newline at end of file