X-Git-Url: https://git.martlubbers.net/?a=blobdiff_plain;f=AST.dcl;h=4f65b0eed3f0868fe52326df8ad8ee2c23b594d8;hb=1f01e39fb2383aa2c63234d0750c0459fe3de752;hp=340aec64dae6a127bf4510f0982a303f5cff6e3f;hpb=fe40818bbc1d327f0adfbbbfe7ecfbe15d4eb053;p=cc1516.git diff --git a/AST.dcl b/AST.dcl index 340aec6..4f65b0e 100644 --- a/AST.dcl +++ b/AST.dcl @@ -1,43 +1,51 @@ 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 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 - = 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 String [Expr] [FieldSelector] + | 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] -:: FunType = FunType [Type] (Maybe Type) -:: FunCall = FunCall String [Expr] +:: FunDecl = FunDecl Pos String [String] (Maybe Type) [VarDecl] [Stmt] :: Stmt = IfStmt Expr [Stmt] [Stmt] | WhileStmt Expr [Stmt] | AssStmt VarDef Expr - | FunStmt FunCall + | FunStmt String [Expr] | ReturnStmt (Maybe Expr) +instance toString Pos +instance toString Type instance toString AST + +instance zero Pos +instance == Op1 +instance == Op2 +instance < Op1 +instance < Op2 +instance == Type