X-Git-Url: https://git.martlubbers.net/?a=blobdiff_plain;f=parse.icl;h=46a92e3612f39402a186f34f6f2f5f42e6330cd8;hb=f081c2c5e248331eb6e2f090f4afe818fd8259eb;hp=004c1f4d071187e3a8c816681ea010b0f161c049;hpb=29d164f53e029e8133e05b599241eb6c14d7fe47;p=cc1516.git diff --git a/parse.icl b/parse.icl index 004c1f4..46a92e3 100644 --- a/parse.icl +++ b/parse.icl @@ -127,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) <|> @@ -136,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