X-Git-Url: https://git.martlubbers.net/?a=blobdiff_plain;f=AST.dcl;h=91320675bcae60c1f042f88847f5662246af6e2e;hb=9e30ea275d06506244e92f26c121715cbfd9c315;hp=e0687c3c134e3a588683e92ca4151abf7223a9a2;hpb=80bcdf651a056b8993e042b57b4295550e8566bb;p=cc1516.git diff --git a/AST.dcl b/AST.dcl index e0687c3..9132067 100644 --- a/AST.dcl +++ b/AST.dcl @@ -3,10 +3,18 @@ definition module AST from Data.Maybe import :: Maybe from StdOverloaded import class toString +/* + * Type errors can happen in either + * - variable declarations (x :: Int = True) + * - function declarations (f :: (Char -> Int) = (+)1) + * - Expressions (1 + 'a') + * So these are the items that will get position metadata + */ + :: Pos = {line :: Int, col :: Int} :: AST = AST [VarDecl] [FunDecl] -:: VarDecl = VarDecl Type String Expr +:: VarDecl = VarDecl Pos Type String Expr :: Type = TupleType (Type, Type) | ListType Type @@ -16,22 +24,22 @@ from StdOverloaded import class toString | CharType | VarType :: Expr - = VarExpr VarDef - | Op2Expr Expr Op2 Expr - | Op1Expr Op1 Expr - | IntExpr Int - | CharExpr Char - | BoolExpr Bool - | FunExpr FunCall - | EmptyListExpr - | TupleExpr (Expr, Expr) + = VarExpr Pos VarDef + | Op2Expr Pos Expr Op2 Expr + | Op1Expr Pos Op1 Expr + | IntExpr Pos Int + | CharExpr Pos Char + | BoolExpr Pos Bool + | FunExpr Pos FunCall + | EmptyListExpr Pos + | TupleExpr Pos (Expr, Expr) :: VarDef = VarDef String [FieldSelector] :: FieldSelector = FieldHd | FieldTl | FieldFst | FieldSnd :: Op1 = UnNegation | UnMinus :: Op2 = BiPlus | BiMinus | BiTimes | BiDivide | BiMod | BiEquals | BiLesser | BiGreater | BiLesserEq | BiGreaterEq | BiUnEqual | BiAnd | BiOr | BiCons -:: FunDecl = FunDecl String [String] (Maybe FunType) [VarDecl] [Stmt] +:: FunDecl = FunDecl Pos String [String] (Maybe FunType) [VarDecl] [Stmt] :: FunType = FunType [Type] (Maybe Type) :: FunCall = FunCall String [Expr] :: Stmt