From 382c98bdbacda3f9dd520b81e93e4a178558b072 Mon Sep 17 00:00:00 2001
From: Andrei Paskevich <andrei@lri.fr>
Date: Mon, 16 Apr 2018 13:51:31 +0200
Subject: [PATCH] Lexer: handle (*) entirely in the lexer

this avoids handling LEFTPAR_STAR_RIGHTPAR in the parser
---
 src/driver/driver_lexer.mll  | 15 ++++++++++-----
 src/driver/driver_parser.mly |  3 +--
 src/parser/lexer.mll         | 12 +++++++++---
 src/parser/parser.mly        |  7 +------
 4 files changed, 21 insertions(+), 16 deletions(-)

diff --git a/src/driver/driver_lexer.mll b/src/driver/driver_lexer.mll
index 8cbceb4944..40784adfe2 100644
--- a/src/driver/driver_lexer.mll
+++ b/src/driver/driver_lexer.mll
@@ -52,7 +52,6 @@
         "converter", CONVERTER;
         "literal", LITERAL;
       ]
-
 }
 
 let space = [' ' '\t' '\r']
@@ -65,12 +64,18 @@ let op_char = ['=' '<' '>' '~' '+' '-' '*' '/' '%'
 
 rule token = parse
   | '\n'
-      { new_line lexbuf; token lexbuf }
+      { Lexing.new_line lexbuf; token lexbuf }
   | space+
       { token lexbuf }
-  | "(*)"
-      { LEFTPAR_STAR_RIGHTPAR }
-  | "(*"
+  | "(**)"
+      { token lexbuf }
+  | "(*(*"
+      { Lexlib.comment lexbuf; Lexlib.comment lexbuf; token lexbuf }
+  | "(*" '\n'
+      { Lexing.new_line lexbuf; Lexlib.comment lexbuf; token lexbuf }
+  | "(*(*)"
+  | "(*" eof
+  | "(*" [^ ')']
       { Lexlib.comment lexbuf; token lexbuf }
   | '_'
       { UNDERSCORE }
diff --git a/src/driver/driver_parser.mly b/src/driver/driver_parser.mly
index e510496997..c0fb631353 100644
--- a/src/driver/driver_parser.mly
+++ b/src/driver/driver_parser.mly
@@ -26,7 +26,7 @@
 %token BLACKLIST
 %token MODULE EXCEPTION VAL CONVERTER LITERAL
 %token FUNCTION PREDICATE TYPE PROP ALL FILENAME TRANSFORM PLUGIN
-%token LEFTPAR_STAR_RIGHTPAR COMMA CONSTANT
+%token COMMA CONSTANT
 %token LEFTSQ RIGHTSQ LARROW
 
 %nonassoc SYNTAX REMOVE PRELUDE
@@ -133,7 +133,6 @@ ident:
 
 ident_rich:
 | ident                     { $1 }
-| LEFTPAR_STAR_RIGHTPAR     { Ident.infix "*" }
 | LEFTPAR operator RIGHTPAR { $2 }
 
 operator:
diff --git a/src/parser/lexer.mll b/src/parser/lexer.mll
index 538eee7510..b27bd1e7b7 100644
--- a/src/parser/lexer.mll
+++ b/src/parser/lexer.mll
@@ -166,9 +166,15 @@ rule token = parse
         (['p' 'P'] (['-' '+']? digit+ as e))?
       { REAL (Number.real_const_hex i f
           (Opt.map Lexlib.remove_leading_plus e)) }
-  | "(*)"
-      { LEFTPAR_STAR_RIGHTPAR }
-  | "(*"
+  | "(**)"
+      { token lexbuf }
+  | "(*(*"
+      { Lexlib.comment lexbuf; Lexlib.comment lexbuf; token lexbuf }
+  | "(*" '\n'
+      { Lexing.new_line lexbuf; Lexlib.comment lexbuf; token lexbuf }
+  | "(*(*)"
+  | "(*" eof
+  | "(*" [^ ')']
       { Lexlib.comment lexbuf; token lexbuf }
   | "'" (lident as id)
       { QUOTE_LIDENT id }
diff --git a/src/parser/parser.mly b/src/parser/parser.mly
index d6050d6497..5c7134008a 100644
--- a/src/parser/parser.mly
+++ b/src/parser/parser.mly
@@ -147,7 +147,7 @@
 %token BAR
 %token COLON COMMA
 %token DOT DOTDOT EQUAL LT GT LTGT MINUS
-%token LEFTPAR LEFTPAR_STAR_RIGHTPAR LEFTSQ
+%token LEFTPAR LEFTSQ
 %token LARROW LRARROW OR
 %token RIGHTPAR RIGHTSQ
 %token UNDERSCORE
@@ -1183,11 +1183,6 @@ lident_rich:
 
 lident_op_id:
 | LEFTPAR lident_op RIGHTPAR  { mk_id $2 $startpos($2) $endpos($2) }
-| LEFTPAR_STAR_RIGHTPAR
-    { (* parentheses are removed from the location *)
-      let s = let s = $startpos in { s with Lexing.pos_cnum = s.Lexing.pos_cnum + 1 } in
-      let e = let e = $endpos   in { e with Lexing.pos_cnum = e.Lexing.pos_cnum - 1 } in
-      mk_id (Ident.infix "*") s e }
 
 lident_op:
 | op_symbol               { Ident.infix $1 }
-- 
GitLab