diff options
author | Alain Frisch <alain@frisch.fr> | 2011-12-21 08:58:56 +0000 |
---|---|---|
committer | Alain Frisch <alain@frisch.fr> | 2011-12-21 08:58:56 +0000 |
commit | d79455bc76b260455bd6a443a6d8149df6602241 (patch) | |
tree | c7d56544e11a13d6ba4dcc6c85987fdc21d6c95c /parsing/parser.mly | |
parent | 8c16e88983a7788bc78a2bcf702b2b615852289a (diff) |
New syntax for 'custom let bindings': let.simple_expr pat = expr in expr
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@11906 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
Diffstat (limited to 'parsing/parser.mly')
-rw-r--r-- | parsing/parser.mly | 25 |
1 files changed, 3 insertions, 22 deletions
diff --git a/parsing/parser.mly b/parsing/parser.mly index 87d43bdab..43a485151 100644 --- a/parsing/parser.mly +++ b/parsing/parser.mly @@ -319,17 +319,6 @@ let wrap_type_annotation newtypes core_type body = let polyvars, core_type = varify_constructors newtypes core_type in (exp, ghtyp(Ptyp_poly(polyvars,core_type))) -let let_operator op bindings cont = - let pat, expr = - match List.rev bindings with - | [] -> assert false - | [x] -> x - | l -> - let pats, exprs = List.split l in - ghpat (Ppat_tuple pats), ghexp (Pexp_tuple exprs) - in - mkexp(Pexp_apply(op, ["", expr; "", ghexp(Pexp_function("", None, [pat, cont]))])) - %} /* Tokens */ @@ -397,7 +386,6 @@ let let_operator op bindings cont = %token LESS %token LESSMINUS %token LET -%token <string> LETOP %token <string> LIDENT %token LPAREN %token MATCH @@ -474,7 +462,6 @@ The precedences must be listed from low to high. %nonassoc below_SEMI %nonassoc SEMI /* below EQUAL ({lbl=...; lbl=...}) */ %nonassoc LET /* above SEMI ( ...; let ... in ...) */ -%nonassoc LETOP %nonassoc below_WITH %nonassoc FUNCTION WITH /* below BAR (match ... with ...) */ %nonassoc AND /* above WITH (module rec A: SIG with ... and ...) */ @@ -995,8 +982,9 @@ expr: { mkexp(Pexp_apply($1, List.rev $2)) } | LET rec_flag let_bindings IN seq_expr { mkexp(Pexp_let($2, List.rev $3, $5)) } - | let_operator let_bindings IN seq_expr - { let_operator $1 $2 $4 } + | LET DOT simple_expr let_binding IN seq_expr + { let (pat, expr) = $4 in + mkexp(Pexp_apply($3, ["", expr; "", ghexp(Pexp_function("", None, [pat, $6]))])) } | LET MODULE UIDENT module_binding IN seq_expr { mkexp(Pexp_letmodule($3, $4, $6)) } | LET OPEN mod_longident IN seq_expr @@ -1719,7 +1707,6 @@ operator: | INFIXOP2 { $1 } | INFIXOP3 { $1 } | INFIXOP4 { $1 } - | LETOP { $1 } | BANG { "!" } | PLUS { "+" } | PLUSDOT { "+." } @@ -1735,12 +1722,6 @@ operator: | AMPERAMPER { "&&" } | COLONEQUAL { ":=" } ; -let_operator: - LETOP - { mkexp (Pexp_ident(Lident $1)) } - | mod_longident DOT LETOP - { mkexp (Pexp_ident(Ldot ($1, $3))) } -; constr_ident: UIDENT { $1 } /* | LBRACKET RBRACKET { "[]" } */ |