X-Git-Url: https://git.martlubbers.net/?a=blobdiff_plain;f=parse.dcl;h=281c80451da52735801366035ebc4938985f3d9a;hb=6b3981fb80952fe2c510b6f9b849adb0dff77d2c;hp=c7d177ccd7c2aa31b6c7243f9c8f36d61137d08c;hpb=953019d8255b9779d67fb1cb6c8946f589a24936;p=cc1516.git diff --git a/parse.dcl b/parse.dcl index c7d177c..281c804 100644 --- a/parse.dcl +++ b/parse.dcl @@ -1,8 +1,48 @@ definition module parse +from Data.Either import :: Either +from Data.Maybe import :: Maybe +from StdString import class toString + import lex -:: ParserOutput :== Either String AST -:: AST = If | While //stub +:: ParserOutput :== Either Error AST + +:: AST = AST [VarDecl] [FunDecl] +:: VarDecl = VarDecl Type String Expr +:: Type + = TupleType (Type, Type) + | ListType Type + | IdType String + | IntType + | BoolType + | CharType + | VarType +:: Expr + = VarExpr VarDef + | Op2Expr Expr Op2 Expr + | Op1Expr Op1 Expr + | IntExpr Int + | CharExpr Char + | BoolExpr Bool + | 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 +:: 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 -parse :: LexerOutput -> ParserOutput +parser :: LexerOutput -> ParserOutput