Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
cduce
cduce
Commits
ca12bee3
Commit
ca12bee3
authored
Jul 10, 2007
by
Pietro Abate
Browse files
[r2003-09-17 22:04:50 by cvscast] Empty log message
Original author: cvscast Date: 2003-09-17 22:04:50+00:00
parent
497ecd6e
Changes
2
Hide whitespace changes
Inline
Side-by-side
parser/wlexer.ml
View file @
ca12bee3
...
...
@@ -74,6 +74,13 @@ let nb_classes = 40
#
17
"parser/wlexer.mll"
(* the new Lexing lib in OCaml 3.07 has a different handling of
locations. The following functions simulate the old behavior *)
let
lexeme_start
lexbuf
=
lexbuf
.
Lexing
.
lex_abs_pos
+
lexbuf
.
Lexing
.
lex_start_pos
let
lexeme_end
lexbuf
=
lexbuf
.
Lexing
.
lex_abs_pos
+
lexbuf
.
Lexing
.
lex_curr_pos
let
keywords
=
Hashtbl
.
create
17
let
in_comment
=
ref
false
...
...
@@ -123,7 +130,7 @@ let nb_classes = 40
aux
0
0
#
1
27
"parser/wlexer.ml"
#
1
34
"parser/wlexer.ml"
let
__ocaml_lex_tables
=
{
Lexing
.
lex_base
=
"
\000\000\246\255\245\255\008\000\036\000\007\000\250\255\005\000
\
...
...
@@ -209,50 +216,50 @@ let __ocaml_lex_tables = {
let
rec
token
engine
lexbuf
=
match
engine
__ocaml_lex_tables
0
lexbuf
with
|
0
->
#
7
8
"parser/wlexer.mll"
#
8
5
"parser/wlexer.mll"
(
token
engine
lexbuf
)
#
2
15
"parser/wlexer.ml"
#
2
22
"parser/wlexer.ml"
|
1
->
#
8
0
"parser/wlexer.mll"
#
8
7
"parser/wlexer.mll"
(
let
s
=
Lexing
.
lexeme
lexbuf
in
if
Hashtbl
.
mem
keywords
s
then
""
,
s
else
"IDENT"
,
s
)
#
2
2
3
"parser/wlexer.ml"
#
23
0
"parser/wlexer.ml"
|
2
->
#
85
"parser/wlexer.mll"
#
92
"parser/wlexer.mll"
(
let
s
=
Lexing
.
lexeme
lexbuf
in
let
s
=
String
.
sub
s
0
(
String
.
length
s
-
2
)
in
"ANY_IN_NS"
,
s
)
#
23
2
"parser/wlexer.ml"
#
23
9
"parser/wlexer.ml"
|
3
->
#
9
0
"parser/wlexer.mll"
#
9
7
"parser/wlexer.mll"
(
"ANY_IN_NS"
,
""
)
#
2
37
"parser/wlexer.ml"
#
2
44
"parser/wlexer.ml"
|
4
->
#
9
2
"parser/wlexer.mll"
#
9
9
"parser/wlexer.mll"
(
"INT"
,
Lexing
.
lexeme
lexbuf
)
#
24
2
"parser/wlexer.ml"
#
24
9
"parser/wlexer.ml"
|
5
->
#
97
"parser/wlexer.mll"
#
104
"parser/wlexer.mll"
(
""
,
Lexing
.
lexeme
lexbuf
)
#
24
7
"parser/wlexer.ml"
#
2
5
4
"parser/wlexer.ml"
|
6
->
#
98
"parser/wlexer.mll"
#
105
"parser/wlexer.mll"
(
"DIRECTIVE"
,
Lexing
.
lexeme
lexbuf
)
#
25
2
"parser/wlexer.ml"
#
25
9
"parser/wlexer.ml"
|
7
->
#
10
0
"parser/wlexer.mll"
(
let
string_start
=
Lexing
.
lexeme_start
lexbuf
in
#
10
7
"parser/wlexer.mll"
(
let
string_start
=
lexeme_start
lexbuf
in
string_start_pos
:=
string_start
;
let
double_quote
=
Lexing
.
lexeme_char
lexbuf
0
=
'
"' in
string (Lexing.lexeme lexbuf) engine lexbuf;
...
...
@@ -260,50 +267,50 @@ let rec token engine lexbuf =
string_start - lexbuf.Lexing.lex_abs_pos;
(if double_quote then "
STRING2
" else "
STRING1
"),
(get_stored_string()) )
# 2
64
"
parser
/
wlexer
.
ml
"
# 2
71
"
parser
/
wlexer
.
ml
"
| 8 ->
# 11
0
"
parser
/
wlexer
.
mll
"
( comment_start_pos := [
Lexing.
lexeme_start lexbuf];
# 11
7
"
parser
/
wlexer
.
mll
"
( comment_start_pos := [lexeme_start lexbuf];
in_comment := true;
comment engine lexbuf;
in_comment := false;
token engine lexbuf )
# 2
73
"
parser
/
wlexer
.
ml
"
# 2
80
"
parser
/
wlexer
.
ml
"
| 9 ->
# 1
17
"
parser
/
wlexer
.
mll
"
# 1
24
"
parser
/
wlexer
.
mll
"
( "
EOI
","" )
# 2
7
8 "
parser
/
wlexer
.
ml
"
# 28
5
"
parser
/
wlexer
.
ml
"
| 10 ->
# 1
19
"
parser
/
wlexer
.
mll
"
# 1
26
"
parser
/
wlexer
.
mll
"
( error
(
Lexing.
lexeme_start lexbuf) (
Lexing.
lexeme_end lexbuf)
(lexeme_start lexbuf) (lexeme_end lexbuf)
(Illegal_character ((Lexing.lexeme lexbuf).[0])) )
# 2
85
"
parser
/
wlexer
.
ml
"
# 2
92
"
parser
/
wlexer
.
ml
"
| _ -> failwith "
lexing
:
empty
token
[
token
]
"
and comment engine lexbuf =
match engine __ocaml_lex_tables 27 lexbuf with
| 0 ->
# 12
5
"
parser
/
wlexer
.
mll
"
( comment_start_pos :=
Lexing.
lexeme_start lexbuf :: !comment_start_pos;
# 1
3
2 "
parser
/
wlexer
.
mll
"
( comment_start_pos := lexeme_start lexbuf :: !comment_start_pos;
comment engine lexbuf;
)
#
296
"
parser
/
wlexer
.
ml
"
#
303
"
parser
/
wlexer
.
ml
"
| 1 ->
# 1
29
"
parser
/
wlexer
.
mll
"
# 1
36
"
parser
/
wlexer
.
mll
"
( comment_start_pos := List.tl !comment_start_pos;
if !comment_start_pos <> [] then comment engine lexbuf;
)
# 30
3
"
parser
/
wlexer
.
ml
"
# 3
1
0 "
parser
/
wlexer
.
ml
"
| 2 ->
# 1
33
"
parser
/
wlexer
.
mll
"
( string_start_pos :=
Lexing.
lexeme_start lexbuf;
# 1
40
"
parser
/
wlexer
.
mll
"
( string_start_pos := lexeme_start lexbuf;
Buffer.clear string_buff;
let ender = Lexing.lexeme lexbuf in
(try string ender engine lexbuf
...
...
@@ -312,93 +319,93 @@ and comment engine lexbuf =
error st (st+2) Unterminated_string_in_comment);
Buffer.clear string_buff;
comment engine lexbuf )
# 3
16
"
parser
/
wlexer
.
ml
"
# 3
23
"
parser
/
wlexer
.
ml
"
| 3 ->
# 1
43
"
parser
/
wlexer
.
mll
"
# 1
50
"
parser
/
wlexer
.
mll
"
( let st = List.hd !comment_start_pos in
error st (st+2) Unterminated_comment
)
# 3
2
3 "
parser
/
wlexer
.
ml
"
# 33
0
"
parser
/
wlexer
.
ml
"
| 4 ->
# 14
7
"
parser
/
wlexer
.
mll
"
# 1
5
4 "
parser
/
wlexer
.
mll
"
( comment engine lexbuf )
# 3
28
"
parser
/
wlexer
.
ml
"
# 3
35
"
parser
/
wlexer
.
ml
"
| _ -> failwith "
lexing
:
empty
token
[
comment
]
"
and string ender engine lexbuf =
match engine __ocaml_lex_tables 33 lexbuf with
| 0 ->
# 15
1
"
parser
/
wlexer
.
mll
"
# 15
8
"
parser
/
wlexer
.
mll
"
( let c = Lexing.lexeme lexbuf in
if c = ender then ()
else (store_char (Lexing.lexeme lexbuf);
string ender engine lexbuf) )
# 34
0
"
parser
/
wlexer
.
ml
"
# 34
7
"
parser
/
wlexer
.
ml
"
| 1 ->
# 1
5
6 "
parser
/
wlexer
.
mll
"
# 16
3
"
parser
/
wlexer
.
mll
"
( store_ascii (Lexing.lexeme_char lexbuf 1);
string ender engine lexbuf )
# 3
46
"
parser
/
wlexer
.
ml
"
# 3
53
"
parser
/
wlexer
.
ml
"
| 2 ->
# 1
59
"
parser
/
wlexer
.
mll
"
# 1
66
"
parser
/
wlexer
.
mll
"
( let c = Lexing.lexeme_char lexbuf 1 in
if c = 'x'
then parse_hexa_char engine lexbuf
else store_special c;
string ender engine lexbuf )
# 3
55
"
parser
/
wlexer
.
ml
"
# 3
62
"
parser
/
wlexer
.
ml
"
| 3 ->
# 1
65
"
parser
/
wlexer
.
mll
"
# 1
72
"
parser
/
wlexer
.
mll
"
( store_code (decimal_char (Lexing.lexeme lexbuf));
string ender engine lexbuf )
# 36
1
"
parser
/
wlexer
.
ml
"
# 36
8
"
parser
/
wlexer
.
ml
"
| 4 ->
# 1
68
"
parser
/
wlexer
.
mll
"
# 1
75
"
parser
/
wlexer
.
mll
"
( error
(
Lexing.
lexeme_start lexbuf) (
Lexing.
lexeme_end lexbuf)
(lexeme_start lexbuf) (lexeme_end lexbuf)
(Illegal_character '
\\
') )
# 3
68
"
parser
/
wlexer
.
ml
"
# 3
75
"
parser
/
wlexer
.
ml
"
| 5 ->
# 17
2
"
parser
/
wlexer
.
mll
"
# 17
9
"
parser
/
wlexer
.
mll
"
( error !string_start_pos (!string_start_pos+1) Unterminated_string )
# 3
73
"
parser
/
wlexer
.
ml
"
# 3
80
"
parser
/
wlexer
.
ml
"
| 6 ->
# 1
74
"
parser
/
wlexer
.
mll
"
# 1
81
"
parser
/
wlexer
.
mll
"
( store_code (Char.code (Lexing.lexeme_char lexbuf 0));
(* Adapt when source is UTF8 *)
string ender engine lexbuf )
# 38
0
"
parser
/
wlexer
.
ml
"
# 38
7
"
parser
/
wlexer
.
ml
"
| _ -> failwith "
lexing
:
empty
token
[
string
]
"
and parse_hexa_char engine lexbuf =
match engine __ocaml_lex_tables 37 lexbuf with
| 0 ->
# 18
0
"
parser
/
wlexer
.
mll
"
# 18
7
"
parser
/
wlexer
.
mll
"
( store_code (hexa_char (Lexing.lexeme lexbuf)) )
# 3
8
9 "
parser
/
wlexer
.
ml
"
# 39
6
"
parser
/
wlexer
.
ml
"
| 1 ->
# 18
2
"
parser
/
wlexer
.
mll
"
# 18
9
"
parser
/
wlexer
.
mll
"
( error
(
Lexing.
lexeme_start lexbuf) (
Lexing.
lexeme_end lexbuf)
(lexeme_start lexbuf) (lexeme_end lexbuf)
(Illegal_character '
\\
') )
#
396
"
parser
/
wlexer
.
ml
"
#
403
"
parser
/
wlexer
.
ml
"
| _ -> failwith "
lexing
:
empty
token
[
parse_hexa_char
]
"
;;
# 1
88
"
parser
/
wlexer
.
mll
"
# 1
95
"
parser
/
wlexer
.
mll
"
let delta_loc = ref 0
...
...
@@ -410,10 +417,6 @@ and parse_hexa_char engine lexbuf =
let last_tok = ref ("","")
let lexeme_start lexbuf =
lexbuf.Lexing.lex_abs_pos + lexbuf.Lexing.lex_start_pos
let lexeme_end lexbuf =
lexbuf.Lexing.lex_abs_pos + lexbuf.Lexing.lex_curr_pos
let lexer_func_of_wlex lexfun lexengine cs =
let dl = !delta_loc in
...
...
@@ -593,4 +596,4 @@ and parse_hexa_char engine lexbuf =
let latin1_engine = Lex_engines.engine_tiny_8bit table
#
597
"
parser
/
wlexer
.
ml
"
#
600
"
parser
/
wlexer
.
ml
"
parser/wlexer.mll
View file @
ca12bee3
...
...
@@ -15,6 +15,13 @@ classes
{
(* the new Lexing lib in OCaml 3.07 has a different handling of
locations. The following functions simulate the old behavior *)
let
lexeme_start
lexbuf
=
lexbuf
.
Lexing
.
lex_abs_pos
+
lexbuf
.
Lexing
.
lex_start_pos
let
lexeme_end
lexbuf
=
lexbuf
.
Lexing
.
lex_abs_pos
+
lexbuf
.
Lexing
.
lex_curr_pos
let
keywords
=
Hashtbl
.
create
17
let
in_comment
=
ref
false
...
...
@@ -97,7 +104,7 @@ rule token = parse
{
""
,
Lexing
.
lexeme
lexbuf
}
|
"#"
ncname
{
"DIRECTIVE"
,
Lexing
.
lexeme
lexbuf
}
|
'
"' | "
'
"
{ let string_start =
Lexing.
lexeme_start lexbuf in
{ let string_start = lexeme_start lexbuf in
string_start_pos := string_start;
let double_quote = Lexing.lexeme_char lexbuf 0 = '"
'
in
string
(
Lexing
.
lexeme
lexbuf
)
engine
lexbuf
;
...
...
@@ -107,7 +114,7 @@ rule token = parse
(
get_stored_string
()
)
}
|
"(*"
{
comment_start_pos
:=
[
Lexing
.
lexeme_start
lexbuf
];
{
comment_start_pos
:=
[
lexeme_start
lexbuf
];
in_comment
:=
true
;
comment
engine
lexbuf
;
in_comment
:=
false
;
...
...
@@ -117,12 +124,12 @@ rule token = parse
{
"EOI"
,
""
}
|
_
{
error
(
Lexing
.
lexeme_start
lexbuf
)
(
Lexing
.
lexeme_end
lexbuf
)
(
lexeme_start
lexbuf
)
(
lexeme_end
lexbuf
)
(
Illegal_character
((
Lexing
.
lexeme
lexbuf
)
.
[
0
]))
}
and
comment
=
parse
"(*"
{
comment_start_pos
:=
Lexing
.
lexeme_start
lexbuf
::
!
comment_start_pos
;
{
comment_start_pos
:=
lexeme_start
lexbuf
::
!
comment_start_pos
;
comment
engine
lexbuf
;
}
|
"*)"
...
...
@@ -130,7 +137,7 @@ and comment = parse
if
!
comment_start_pos
<>
[]
then
comment
engine
lexbuf
;
}
|
'
"' | "
'
"
{ string_start_pos :=
Lexing.
lexeme_start lexbuf;
{ string_start_pos := lexeme_start lexbuf;
Buffer.clear string_buff;
let ender = Lexing.lexeme lexbuf in
(try string ender engine lexbuf
...
...
@@ -166,7 +173,7 @@ and string ender = parse
string ender engine lexbuf }
| '
\\
'
{ error
(
Lexing.
lexeme_start lexbuf) (
Lexing.
lexeme_end lexbuf)
(lexeme_start lexbuf) (lexeme_end lexbuf)
(Illegal_character '
\\
') }
| eof
{ error !string_start_pos (!string_start_pos+1) Unterminated_string }
...
...
@@ -180,7 +187,7 @@ and parse_hexa_char = parse
{ store_code (hexa_char (Lexing.lexeme lexbuf)) }
| _
{ error
(
Lexing.
lexeme_start lexbuf) (
Lexing.
lexeme_end lexbuf)
(lexeme_start lexbuf) (lexeme_end lexbuf)
(Illegal_character '
\\
') }
...
...
@@ -196,10 +203,6 @@ and parse_hexa_char = parse
let last_tok = ref ("","")
let lexeme_start lexbuf =
lexbuf.Lexing.lex_abs_pos + lexbuf.Lexing.lex_start_pos
let lexeme_end lexbuf =
lexbuf.Lexing.lex_abs_pos + lexbuf.Lexing.lex_curr_pos
let lexer_func_of_wlex lexfun lexengine cs =
let dl = !delta_loc in
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment