X-Git-Url: https://git.martlubbers.net/?a=blobdiff_plain;ds=sidebyside;f=AST.dcl;h=b005f62577c8be8bbd628dc1250fc316779d0505;hb=1f77588b4d69fdb9f8880864240458efd5b51561;hp=463c7b7b3dfbfd193c834500a721b8d5eca40116;hpb=220cb1cc56feab3f818503838b3afd7ea2225403;p=cc1516.git diff --git a/AST.dcl b/AST.dcl index 463c7b7..b005f62 100644 --- a/AST.dcl +++ b/AST.dcl @@ -1,19 +1,21 @@ definition module AST from Data.Maybe import :: Maybe -from StdOverloaded import class toString, class ==, class zero +from StdOverloaded import class toString, class ==, class zero, class < :: Pos = {line :: Int, col :: Int} :: AST = AST [FunDecl] :: VarDecl = VarDecl Pos (Maybe Type) String Expr +:: TVar :== String :: Type = TupleType (Type, Type) | ListType Type - | IdType String + | IdType TVar | IntType | BoolType | CharType | VoidType + | FuncType Type | (->>) infixl 7 Type Type :: Expr = VarExpr Pos VarDef @@ -25,6 +27,7 @@ from StdOverloaded import class toString, class ==, class zero | FunExpr Pos String [Expr] [FieldSelector] | EmptyListExpr Pos | TupleExpr Pos (Expr, Expr) + | LambdaExpr Pos [String] Expr :: VarDef = VarDef String [FieldSelector] :: FieldSelector = FieldHd | FieldTl | FieldFst | FieldSnd :: Op1 = UnNegation | UnMinus @@ -35,11 +38,21 @@ from StdOverloaded import class toString, class ==, class zero = IfStmt Expr [Stmt] [Stmt] | WhileStmt Expr [Stmt] | AssStmt VarDef Expr - | FunStmt String [Expr] + | FunStmt String [Expr] [FieldSelector] | ReturnStmt (Maybe Expr) instance toString Pos instance toString Type instance toString AST +instance toString FieldSelector +instance toString Op2 +instance toString Expr +instance toString VarDecl +instance toString FunDecl instance zero Pos +instance == Op1 +instance == Op2 +instance < Op1 +instance < Op2 +instance == Type