X-Git-Url: https://git.martlubbers.net/?a=blobdiff_plain;f=AST.dcl;h=ac1cf4e927ae805dcccf16b94bf7abac2ec5b1d6;hb=5b1c37a52f0d63d4972665f672df100a231a2f57;hp=91320675bcae60c1f042f88847f5662246af6e2e;hpb=3ca56ec76529508b1e6a3c10c145b15312f571f7;p=cc1516.git diff --git a/AST.dcl b/AST.dcl index 9132067..ac1cf4e 100644 --- a/AST.dcl +++ b/AST.dcl @@ -3,16 +3,7 @@ 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 Pos Type String Expr :: Type @@ -23,6 +14,8 @@ from StdOverloaded import class toString | BoolType | CharType | VarType + | VoidType + | (->>) infixl 7 Type Type :: Expr = VarExpr Pos VarDef | Op2Expr Pos Expr Op2 Expr @@ -38,9 +31,7 @@ from StdOverloaded import class toString :: Op1 = UnNegation | UnMinus :: Op2 = BiPlus | BiMinus | BiTimes | BiDivide | BiMod | BiEquals | BiLesser | BiGreater | BiLesserEq | BiGreaterEq | BiUnEqual | BiAnd | BiOr | BiCons - -:: FunDecl = FunDecl Pos String [String] (Maybe FunType) [VarDecl] [Stmt] -:: FunType = FunType [Type] (Maybe Type) +:: FunDecl = FunDecl Pos String [String] (Maybe Type) [VarDecl] [Stmt] :: FunCall = FunCall String [Expr] :: Stmt = IfStmt Expr [Stmt] [Stmt] @@ -50,3 +41,5 @@ from StdOverloaded import class toString | ReturnStmt (Maybe Expr) instance toString AST +instance toString Type +instance toString Pos