Commit 382c98bd authored by Andrei Paskevich's avatar Andrei Paskevich

Lexer: handle (*) entirely in the lexer

this avoids handling LEFTPAR_STAR_RIGHTPAR in the parser
parent 3ead22d3
......@@ -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 }
......
......@@ -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:
......
......@@ -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 }
......
......@@ -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 }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment