X-Git-Url: https://git.martlubbers.net/?a=blobdiff_plain;f=AST.dcl;h=1592143f5acc8d2fc7ae199f08ab4730c407bcd1;hb=f081c2c5e248331eb6e2f090f4afe818fd8259eb;hp=f15690d6cd31aa69b95cd3ef2960df293f4c6393;hpb=f5e125920d85bc53eda7b51f3f03e89fcaf3a0ce;p=cc1516.git diff --git a/AST.dcl b/AST.dcl index f15690d..1592143 100644 --- a/AST.dcl +++ b/AST.dcl @@ -1,19 +1,19 @@ definition module AST from Data.Maybe import :: Maybe -from StdOverloaded import class toString +from StdOverloaded import class toString, class ==, class zero, class < :: Pos = {line :: Int, col :: Int} -:: AST = AST [VarDecl] [FunDecl] -:: VarDecl = VarDecl Pos Type String Expr +:: 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 - | VarType | VoidType | (->>) infixl 7 Type Type :: Expr @@ -23,7 +23,7 @@ from StdOverloaded import class toString | IntExpr Pos Int | CharExpr Pos Char | BoolExpr Pos Bool - | FunExpr Pos FunCall + | FunExpr Pos String [Expr] [FieldSelector] | EmptyListExpr Pos | TupleExpr Pos (Expr, Expr) :: VarDef = VarDef String [FieldSelector] @@ -32,14 +32,24 @@ from StdOverloaded import class toString :: Op2 = BiPlus | BiMinus | BiTimes | BiDivide | BiMod | BiEquals | BiLesser | BiGreater | BiLesserEq | BiGreaterEq | BiUnEqual | BiAnd | BiOr | BiCons :: FunDecl = FunDecl Pos String [String] (Maybe Type) [VarDecl] [Stmt] -:: FunCall = FunCall String [Expr] :: Stmt = IfStmt Expr [Stmt] [Stmt] | WhileStmt Expr [Stmt] | AssStmt VarDef Expr - | FunStmt FunCall + | FunStmt String [Expr] | ReturnStmt (Maybe Expr) -instance toString AST -instance toString Type instance toString Pos +instance toString Type +instance toString AST +instance toString FieldSelector +instance toString Op2 +instance toString Expr +instance toString VarDecl + +instance zero Pos +instance == Op1 +instance == Op2 +instance < Op1 +instance < Op2 +instance == Type