X-Git-Url: https://git.martlubbers.net/?a=blobdiff_plain;f=parse.dcl;h=281c80451da52735801366035ebc4938985f3d9a;hb=a8130cb2a970f385a7da0e2a8f7b02c1cb1a7639;hp=a3640fa954d3dd754c87634b5b2a9b90457c0a86;hpb=87fe087ef7e1ad9deff8a725faf1ebbefcb7e549;p=cc1516.git diff --git a/parse.dcl b/parse.dcl index a3640fa..281c804 100644 --- a/parse.dcl +++ b/parse.dcl @@ -1,9 +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 -:: Error = ParseException +:: 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