X-Git-Url: https://git.martlubbers.net/?a=blobdiff_plain;f=parse.dcl;h=281c80451da52735801366035ebc4938985f3d9a;hb=6b3981fb80952fe2c510b6f9b849adb0dff77d2c;hp=785dfbcc17603b92652cdc375a88d4e2c804b91f;hpb=4766205e7035a58c8a1fa1557b6e14577ed26f32;p=cc1516.git diff --git a/parse.dcl b/parse.dcl index 785dfbc..281c804 100644 --- a/parse.dcl +++ b/parse.dcl @@ -1,10 +1,48 @@ definition module parse from Data.Either import :: Either +from Data.Maybe import :: Maybe +from StdString import class toString -from lex import :: LexerOutput, :: Token, :: TokenValue +import lex -:: ParserOutput :== Either String AST -:: AST = If | While //stub +:: ParserOutput :== Either Error AST -parse :: LexerOutput -> ParserOutput +:: 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 + +parser :: LexerOutput -> ParserOutput