Comments nu mogelijk
[cc1516.git] / src / parse.dcl
index e7d2a25..55d8a95 100644 (file)
@@ -8,35 +8,39 @@ import lex
 :: ParserOutput :== Either String AST
 
 :: AST = AST [VarDecl] [FunDecl]
-:: VarDecl = VarDecl String Type Expr
+:: VarDecl = VarDecl Type String Expr
 :: Type 
-       = TupleType Type Type
+       = TupleType (Type, Type)
        | ListType Type
        | IdType String
        | IntType 
        | BoolType
        | CharType
        | VarType
-
 :: Expr 
-       = VarExpr String (Maybe FieldSelector)
-       | Op2Expr Expr Op2 Expr //TODO, iets met associativiteit wat niet weet hoe
+       = VarExpr VarDef
+       | Op2Expr Expr Op2 Expr
        | Op1Expr Op1 Expr
        | IntExpr Int
        | CharExpr Char
        | BoolExpr Bool
-       | FunExpr String [Expr]
+       | FunExpr FunCall
        | EmptyListExpr
-       | TupleExpr Expr Expr
-
+       | 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 = Stub
+:: FunDecl = FunDecl String [String] (Maybe FunType) [VarDecl] [Stmt]
+:: 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