From 9308f5b41641ac538f7e804d5426a06dd68d5c7d Mon Sep 17 00:00:00 2001 From: Gaith Hallak Date: Wed, 1 Jun 2022 14:27:21 +0400 Subject: [PATCH] Add operator lambdas --- src/aeso_parser.erl | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/aeso_parser.erl b/src/aeso_parser.erl index 7e5fa62..306bd13 100644 --- a/src/aeso_parser.erl +++ b/src/aeso_parser.erl @@ -335,7 +335,7 @@ exprAtom() -> ?LAZY_P(begin Expr = ?LAZY_P(expr()), choice( - [ id_or_addr(), con(), token(qid), token(qcon) + [ id_or_addr(), con(), token(qid), token(qcon), binop_as_lam() , token(bytes), token(string), token(char) , token(int) , ?RULE(token(hex), set_ann(format, hex, setelement(1, _1, int))) @@ -472,6 +472,19 @@ id() -> token(id). tvar() -> token(tvar). str() -> token(string). +binop_as_lam() -> + BinOps = ['&&', '||', + '+', '-', '*', '/', '^', 'mod', + '==', '!=', '<', '>', '<=', '=<', '>=', + '..', '::', '++', '|>'], + OpToLam = fun(Op = {_, Ann}) -> + IdL = {id, Ann, "l"}, + IdR = {id, Ann, "r"}, + Arg = fun(Id) -> {arg, Ann, Id, type_wildcard(Ann)} end, + {lam, Ann, [Arg(IdL), Arg(IdR)], infix(IdL, Op, IdR)} + end, + ?RULE(parens(choice(lists:map(fun token/1, BinOps))), OpToLam(_1)). + token(Tag) -> ?RULE(tok(Tag), case _1 of