Browse Source

disambigous >=, >>= and >>>=

Nicolas Cannasse 19 years ago
parent
commit
08702dfae2
2 changed files with 13 additions and 4 deletions
  1. 3 3
      lexer.mll
  2. 10 1
      parser.ml

+ 3 - 3
lexer.mll

@@ -151,14 +151,14 @@ rule token = parse
 	| "*=" { mk lexbuf (Binop (OpAssignOp OpMult)) }
 	| "/=" { mk lexbuf (Binop (OpAssignOp OpDiv)) }
 	| "<<=" { mk lexbuf (Binop (OpAssignOp OpShl)) }
-	| ">>=" { mk lexbuf (Binop (OpAssignOp OpShr)) }
-	| ">>>=" { mk lexbuf (Binop (OpAssignOp OpUShr)) }	
+(*//| ">>=" { mk lexbuf (Binop (OpAssignOp OpShr)) } *)
+(*//| ">>>=" { mk lexbuf (Binop (OpAssignOp OpUShr)) } *)
 	| "===" { mk lexbuf (Binop OpPhysEq) }
 	| "!==" { mk lexbuf (Binop OpPhysNotEq) }
 	| "==" { mk lexbuf (Binop OpEq) }
 	| "!=" { mk lexbuf (Binop OpNotEq) }
 	| "<=" { mk lexbuf (Binop OpLte) }
-	| ">=" { mk lexbuf (Binop OpGte) }
+(*//| ">=" { mk lexbuf (Binop OpGte) }*)
 	| "&&" { mk lexbuf (Binop OpBoolAnd) }
 	| "||" { mk lexbuf (Binop OpBoolOr) }
 	| "<<" { mk lexbuf (Binop OpShl) }

+ 10 - 1
parser.ml

@@ -345,9 +345,18 @@ and expr_next e1 = parser
 		(match s with parser
 		| [< '(Binop OpGt,_); s >] ->
 			(match s with parser
-			| [< '(Binop OpGt,_); e2 = expr >] -> make_binop OpUShr e1 e2
+			| [< '(Binop OpGt,_) >] -> 
+				(match s with parser
+				| [< '(Binop OpAssign,_); e2 = expr >] -> make_binop (OpAssignOp OpUShr) e1 e2
+				| [< e2 = expr >] -> make_binop OpUShr e1 e2
+				| [< >] -> serror())
+			| [< '(Binop OpAssign,_); e2 = expr >] -> make_binop (OpAssignOp OpShr) e1 e2
 			| [< e2 = expr >] -> make_binop OpShr e1 e2
 			| [< >] -> serror())
+		| [< '(Binop OpAssign,_); s >] ->
+			(match s with parser
+			| [< e2 = expr >] -> make_binop OpGte e1 e2
+			| [< >] -> serror())
 		| [< e2 = expr >] ->
 			make_binop OpGt e1 e2
 		| [< >] -> serror())