summaryrefslogtreecommitdiff
path: root/Jennisys/TypeChecker.fs
diff options
context:
space:
mode:
Diffstat (limited to 'Jennisys/TypeChecker.fs')
-rw-r--r--Jennisys/TypeChecker.fs26
1 files changed, 26 insertions, 0 deletions
diff --git a/Jennisys/TypeChecker.fs b/Jennisys/TypeChecker.fs
new file mode 100644
index 00000000..c9e5f308
--- /dev/null
+++ b/Jennisys/TypeChecker.fs
@@ -0,0 +1,26 @@
+module TypeChecker
+
+open Ast
+open System.Collections.Generic
+
+let GetClass name decls =
+ match decls |> List.tryFind (function Class(_,_,_) -> true | _ -> false) with
+ | Some(cl) -> cl
+ | None -> Class(name,[],[])
+
+let GetModel name decls =
+ match decls |> List.tryFind (function Model(_,_,_,_,_) -> true | _ -> false) with
+ | Some(m) -> m
+ | None -> Model(name,[],[],[],IdLiteral("true"))
+
+let GetCode name decls =
+ match decls |> List.tryFind (function Code(_,_) -> true | _ -> false) with
+ | Some(c) -> c
+ | None -> Code(name,[])
+
+let TypeCheck prog =
+ match prog with
+ | SProgram(decls) ->
+ let componentNames = decls |> List.choose (function Class(name,_,_) -> Some(name) | _ -> None)
+ let clist = componentNames |> List.map (fun name -> Component(GetClass name decls, GetModel name decls, GetCode name decls))
+ Some(Program(clist))