X-Git-Url: https://git.martlubbers.net/?a=blobdiff_plain;f=sem.icl;h=dc774cc0791ed11fd9557a716d996cbf332c8dda;hb=e0fd23079f1f63b83431afe78e9ec218d4609e9a;hp=2003038ad94c1ab32d3bd398abdc79fd62a65502;hpb=022b8166504765b2c84138fc83dfdfaa23fe5774;p=cc1516.git diff --git a/sem.icl b/sem.icl index 2003038..dc774cc 100644 --- a/sem.icl +++ b/sem.icl @@ -1,6 +1,42 @@ implementation module sem -import StdMisc +import qualified Data.Map as Map -semanticAnalysis :: AST -> Either Error AST -semanticAnalysis a = +from Data.Func import $ +from StdFunc import o + +import Data.Either + +import StdString +import StdList +import StdEnum +import RWST +import GenEq + +from Text import class Text(concat), instance Text String + +import AST + +:: Gamma :== 'Map'.Map String Type +:: Constraint :== String +:: Infer a :== RWST [String] [Constraint] Gamma (Either SemError) a +:: SemError + = ParseError Pos String + | UnifyError Pos Type Type + | FieldSelectorError Pos Type FieldSelector + | OperatorError Pos Op2 Type + | UndeclaredVariableError Pos String + | ArgumentMisMatchError Pos String + | Error String + +variableStream :: [String] +variableStream = map toString [1..] + +sem :: AST -> SemOutput +sem (AST vd fd) = Right $ (AST vd fd, 'Map'.newMap) + +instance toString Gamma where + toString mp = concat [concat [k, ": ", toString v, "\n"]\\(k, v)<-'Map'.toList mp] + +instance toString SemError where + toString se = "SemError: "