summaryrefslogtreecommitdiffstats
path: root/parsing/parser.mly
diff options
context:
space:
mode:
Diffstat (limited to 'parsing/parser.mly')
-rw-r--r--parsing/parser.mly31
1 files changed, 18 insertions, 13 deletions
diff --git a/parsing/parser.mly b/parsing/parser.mly
index 1535626f9..ac80d29f1 100644
--- a/parsing/parser.mly
+++ b/parsing/parser.mly
@@ -1,10 +1,10 @@
/***********************************************************************/
/* */
-/* Caml Special Light */
+/* Objective Caml */
/* */
/* Xavier Leroy, projet Cristal, INRIA Rocquencourt */
/* */
-/* Copyright 1995 Institut National de Recherche en Informatique et */
+/* Copyright 1996 Institut National de Recherche en Informatique et */
/* Automatique. Distributed only by permission. */
/* */
/***********************************************************************/
@@ -116,11 +116,13 @@ let rec mkrangepat c1 c2 =
%token FUN
%token FUNCTION
%token FUNCTOR
+%token GREATER
%token GREATERRBRACE
%token GREATERRBRACKET
%token IF
%token IN
%token INCLUDE
+%token <string> INFIXOP0
%token <string> INFIXOP1
%token <string> INFIXOP2
%token <string> INFIXOP3
@@ -132,6 +134,7 @@ let rec mkrangepat c1 c2 =
%token LBRACKET
%token LBRACKETBAR
%token LBRACKETLESS
+%token LESS
%token LESSMINUS
%token LET
%token <string> LIDENT
@@ -190,7 +193,8 @@ let rec mkrangepat c1 c2 =
%right prec_type_arrow /* -> in type expressions */
%right OR BARBAR /* or */
%right AMPERSAND AMPERAMPER /* & */
-%left INFIXOP1 EQUAL /* = < > etc */
+%left INFIXOP0 EQUAL LESS GREATER /* = < > etc */
+%right INFIXOP1 /* @ ^ etc */
%right COLONCOLON /* :: */
%left INFIXOP2 SUBTRACTIVE /* + - */
%left INFIXOP3 STAR /* * / */
@@ -387,6 +391,8 @@ expr:
{ mkexp(Pexp_for($2, $4, $6, $5, $8)) }
| expr COLONCOLON expr
{ mkexp(Pexp_construct(Lident "::", Some(mkexp(Pexp_tuple[$1;$3])))) }
+ | expr INFIXOP0 expr
+ { mkinfix $1 $2 $3 }
| expr INFIXOP1 expr
{ mkinfix $1 $2 $3 }
| expr INFIXOP2 expr
@@ -401,6 +407,10 @@ expr:
{ mkinfix $1 "*" $3 }
| expr EQUAL expr
{ mkinfix $1 "=" $3 }
+ | expr LESS expr
+ { mkinfix $1 "<" $3 }
+ | expr GREATER expr
+ { mkinfix $1 ">" $3 }
| expr OR expr
{ mkinfix $1 "or" $3 }
| expr BARBAR expr
@@ -867,9 +877,9 @@ simple_core_type:
{ mktyp(Ptyp_constr($4, List.rev $2, $5)) }
| LPAREN core_type RPAREN
{ $2 }
- | less meth_list more alias
+ | LESS meth_list GREATER alias
{ mktyp(Ptyp_object($2, $4)) }
- | less more alias
+ | LESS GREATER alias
{ mktyp(Ptyp_object([], $3)) }
| SHARP class_longident alias
{ mktyp(Ptyp_class($2, [], $3)) }
@@ -885,14 +895,6 @@ alias:
| /* empty */
{None}
;
-less:
- INFIXOP1
- { if $1 <> "<" then raise Parse_error }
-;
-more:
- INFIXOP1
- { if $1 <> ">" then raise Parse_error }
-;
core_type_tuple:
simple_core_type STAR simple_core_type
{ [$3; $1] }
@@ -949,6 +951,7 @@ val_ident:
;
operator:
PREFIXOP { $1 }
+ | INFIXOP0 { $1 }
| INFIXOP1 { $1 }
| INFIXOP2 { $1 }
| INFIXOP3 { $1 }
@@ -956,6 +959,8 @@ operator:
| SUBTRACTIVE { $1 }
| STAR { "*" }
| EQUAL { "=" }
+ | LESS { "<" }
+ | GREATER { ">" }
| OR { "or" }
| BARBAR { "||" }
| AMPERSAND { "&" }