diff options
author | Jacques Garrigue <garrigue at math.nagoya-u.ac.jp> | 1999-12-08 08:21:57 +0000 |
---|---|---|
committer | Jacques Garrigue <garrigue at math.nagoya-u.ac.jp> | 1999-12-08 08:21:57 +0000 |
commit | 77d4f18ce657800ebd85530c510521b467d7c3dd (patch) | |
tree | d4ff7e2e660afc0463534306f246fd24f8dbcc69 /parsing/parser.mly | |
parent | 181b12cb95b3361d1fd4b44fa25662c994a9eeb4 (diff) |
changed label_pattern syntax
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@2677 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
Diffstat (limited to 'parsing/parser.mly')
-rw-r--r-- | parsing/parser.mly | 31 |
1 files changed, 22 insertions, 9 deletions
diff --git a/parsing/parser.mly b/parsing/parser.mly index 8e999c76e..afb9c4139 100644 --- a/parsing/parser.mly +++ b/parsing/parser.mly @@ -212,7 +212,6 @@ let unclosed opening_name opening_num closing_name closing_num = %token LBRACELESS %token LBRACKET %token LBRACKETBAR -%token LBRACKETEQUAL %token LBRACKETLESS %token LESS %token LESSMINUS @@ -665,16 +664,34 @@ seq_expr: | expr SEMI seq_expr { mkexp(Pexp_sequence($1, $3)) } ; labeled_simple_pattern: - QUESTION label_pattern LBRACKETEQUAL seq_expr RBRACKET - { ("?" ^ fst $2, Some $4, snd $2) } - | QUESTION label_pattern + QUESTION LPAREN label_let_pattern opt_default RPAREN + { ("?" ^ fst $3, $4, snd $3) } + | QUESTION label_simple_pattern { ("?" ^ fst $2, None, snd $2) } - | label_pattern + | LPAREN label_let_pattern RPAREN + { if !Clflags.classic then syntax_error () else (fst $2, None, snd $2) } + | label_simple_pattern { (fst $1, None, snd $1) } | simple_pattern { ("", None, $1) } ; +opt_default: + /* empty */ { None } + | EQUAL seq_expr { Some $2 } +; +label_let_pattern: + label_pattern + { $1 } + | label_pattern COLON core_type + { let (lab, pat) = $1 in (lab, mkpat(Ppat_constraint(pat, $3))) } +; label_pattern: + LABEL pattern + { ($1, $2) } + | LABELID + { ($1, mkpat(Ppat_var $1)) } +; +label_simple_pattern: LABEL simple_pattern { ($1, $2) } | LABELID @@ -1028,12 +1045,8 @@ simple_pattern: { unclosed "(" 1 ")" 3 } | LPAREN pattern COLON core_type RPAREN { mkpat(Ppat_constraint($2, $4)) } - | LPAREN LABEL core_type RPAREN - { mkpat(Ppat_constraint(mkpat(Ppat_var $2), $3)) } | LPAREN pattern COLON core_type error { unclosed "(" 1 ")" 5 } - | LPAREN LABEL core_type error - { unclosed "(" 1 ")" 4 } ; pattern_comma_list: |