Skip to content

Commit a70d42d

Browse files
committed
WIP in lexer
1 parent 546c1d3 commit a70d42d

3 files changed

Lines changed: 29 additions & 4 deletions

File tree

src/ecIo.ml

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ type ecreader_r = {
3636
(*---*) ecr_lexbuf : Lexing.lexbuf;
3737
(*---*) ecr_source : Buffer.t;
3838
mutable ecr_atstart : bool;
39+
mutable ecr_trim : int;
3940
mutable ecr_tokens : EcParser.token list;
4041
}
4142

@@ -46,6 +47,7 @@ let ecreader_of_lexbuf (buffer : Buffer.t) (lexbuf : L.lexbuf) : ecreader_r =
4647
{ ecr_lexbuf = lexbuf;
4748
ecr_source = buffer;
4849
ecr_atstart = true;
50+
ecr_trim = 0;
4951
ecr_tokens = []; }
5052

5153
(* -------------------------------------------------------------------- *)
@@ -102,8 +104,20 @@ let lexer ?(checkpoint : _ I.checkpoint option) (ecreader : ecreader_r) =
102104
| EcParser.FINAL _ -> true
103105
| _ -> false in
104106

105-
if List.is_empty (ecreader.ecr_tokens) then
106-
ecreader.ecr_tokens <- EcLexer.main lexbuf;
107+
if ecreader.ecr_atstart then
108+
ecreader.ecr_trim <- ecreader.ecr_lexbuf.Lexing.lex_curr_p.pos_cnum;
109+
110+
while List.is_empty (ecreader.ecr_tokens) do
111+
match EcLexer.main lexbuf with
112+
| [COMMENT] ->
113+
if ecreader.ecr_atstart then
114+
ecreader.ecr_trim <- (Lexing.lexeme_end_p ecreader.ecr_lexbuf).pos_cnum
115+
| [DOCCOMMENT _] as tokens ->
116+
if ecreader.ecr_atstart then
117+
ecreader.ecr_tokens <- tokens
118+
| tokens ->
119+
ecreader.ecr_tokens <- tokens
120+
done;
107121

108122
let token, queue = List.destruct ecreader.ecr_tokens in
109123

@@ -119,7 +133,16 @@ let lexer ?(checkpoint : _ I.checkpoint option) (ecreader : ecreader_r) =
119133
in
120134

121135
ecreader.ecr_tokens <- prequeue @ queue;
122-
ecreader.ecr_atstart <- (isfinal token);
136+
137+
if isfinal token then
138+
ecreader.ecr_atstart <- true
139+
else
140+
ecreader.ecr_atstart <- ecreader.ecr_atstart && (
141+
match token with
142+
| P.DOCCOMMENT _ | P.COMMENT -> true
143+
| _ -> false
144+
);
145+
123146
(token, Lexing.lexeme_start_p lexbuf, Lexing.lexeme_end_p lexbuf)
124147

125148
(* -------------------------------------------------------------------- *)
@@ -161,6 +184,7 @@ let xparse (ecreader : ecreader) : string * EcParsetree.prog =
161184
let p1 = ecr.ecr_lexbuf.Lexing.lex_curr_p.pos_cnum in
162185
let cd = parse ecreader in
163186
let p2 = ecr.ecr_lexbuf.Lexing.lex_curr_p.pos_cnum in
187+
let p1 = max p1 ecr.ecr_trim in
164188

165189
(Buffer.sub ecr.ecr_source p1 (p2 - p1), cd)
166190

src/ecLexer.mll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -387,7 +387,7 @@ rule main = parse
387387
[DOCCOMMENT (kind, Buffer.contents buffer)]
388388
}
389389

390-
| "(*" { comment lexbuf; main lexbuf }
390+
| "(*" { comment lexbuf; [COMMENT] }
391391

392392
| "\"" { [STRING (Buffer.contents (string (Buffer.create 0) lexbuf))] }
393393

src/ecParser.mly

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -412,6 +412,7 @@
412412
%token COLON
413413
%token COLONTILD
414414
%token COMMA
415+
%token COMMENT
415416
%token CONGR
416417
%token CONSEQ
417418
%token CONST

0 commit comments

Comments
 (0)