X-Git-Url: https://git.martlubbers.net/?a=blobdiff_plain;f=parse.icl;h=46a92e3612f39402a186f34f6f2f5f42e6330cd8;hb=f081c2c5e248331eb6e2f090f4afe818fd8259eb;hp=766f1ce92b6d072bcb2fa5e0e2045cb09eb62c5e;hpb=817af8de40d49db39dcf02ee5fe346f0d7b73118;p=cc1516.git diff --git a/parse.icl b/parse.icl index 766f1ce..46a92e3 100644 --- a/parse.icl +++ b/parse.icl @@ -75,9 +75,10 @@ parseFunType :: Parser Token Type parseFunType = satTok DoubleColonToken *> parseFT where parseFT :: Parser Token Type - parseFT = (liftM2 (->>) - ((parseBBraces parseFT <|> parseType) <* satTok ArrowToken) - parseFT) <|> parseType + parseFT = (liftM2 (->>) (parseSF <* satTok ArrowToken) (parseFT)) <|> + parseSF + parseSF :: Parser Token Type + parseSF = parseBBraces parseFT <|> parseType parseVarDecl :: Parser Token VarDecl parseVarDecl = liftM4 VarDecl @@ -126,8 +127,6 @@ parseExpr = //Operators in order of binding strength parseBasicExpr :: Parser Token Expr parseBasicExpr = peekPos >>= \pos -> (TupleExpr pos <$> (parseTuple parseExpr)) <|> - (parseFunCall >>= \(ident, args)->parseFieldSelectors >>= \fs-> - pure $ FunExpr pos ident args fs) <|> parseBBraces parseExpr <|> trans1 EmptyListToken (EmptyListExpr pos) <|> trans1 TrueToken (BoolExpr pos True) <|> @@ -135,11 +134,14 @@ parseExpr = //Operators in order of binding strength trans2 (NumberToken zero) (\(NumberToken i)->IntExpr pos i) <|> trans2 (CharToken zero) (\(CharToken c)->CharExpr pos c) <|> (Op1Expr pos <$> parseOp1 <*> parseExpr) <|> + (parseFunCall >>= \(ident, args)->parseFieldSelectors >>= \fs-> + pure $ FunExpr pos ident args fs) <|> (VarExpr pos <$> parseVarDef) parseFunCall :: Parser Token (String, [Expr]) -parseFunCall = tuple <$> parseIdent <*> ( - (parseBBraces $ parseSepList CommaToken parseExpr) <|> pure []) +parseFunCall = liftM2 tuple + parseIdent + (parseBBraces $ parseSepList CommaToken parseExpr) parseVarDef :: Parser Token VarDef parseVarDef = liftM2 VarDef parseIdent parseFieldSelectors