:: ParserOutput :== Either String AST
:: AST = AST [VarDecl] [FunDecl]
-:: VarDecl = VarDecl String Type Expr
+:: VarDecl = VarDecl Type String Expr
:: Type
= TupleType Type Type
| ListType Type
| BoolType
| CharType
| VarType
-
:: Expr
- = VarExpr String (Maybe FieldSelector)
+ = VarExpr VarDef
| Op2Expr Expr Op2 Expr
| Op1Expr Op1 Expr
| IntExpr Int
| CharExpr Char
| BoolExpr Bool
- | FunExpr String [Expr]
+ | FunExpr FunCall
| EmptyListExpr
| TupleExpr 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
-
-//TODO
-
:: FunDecl = FunDecl String [String] FunType [VarDecl] [Stmt]
-:: FunType = Stub
-:: Stmt = Stubbel
+:: FunType = FunType [Type] (Maybe Type)
+:: FunCall = FunCall String [Expr]
+:: Stmt
+ = IfStmt Expr [Stmt] [Stmt]
+ | WhileStmt Expr [Stmt]
+ | AssStmt VarDef Expr
+ | FunStmt FunCall
+ | ReturnStmt (Maybe Expr)
instance toString AST