blob: 5163d2515335344587d90d2daf8b486c44b549cd (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
(***********************************************************************)
(* *)
(* OCaml *)
(* *)
(* Jerome Vouillon, projet Cristal, INRIA Rocquencourt *)
(* OCaml port by John Malecki and Xavier Leroy *)
(* *)
(* Copyright 1996 Institut National de Recherche en Informatique et *)
(* en Automatique. All rights reserved. This file is distributed *)
(* under the terms of the Q Public License version 1.0. *)
(* *)
(***********************************************************************)
{
open Parser
exception Int_overflow
}
rule line = (* Read a whole line *)
parse
([ ^ '\n' '\r' ]* as s) ('\n' | '\r' | "\r\n")
{ s }
| [ ^ '\n' '\r' ]*
{ Lexing.lexeme lexbuf }
| eof
{ raise Exit }
and argument = (* Read a raw argument *)
parse
[ ^ ' ' '\t' ]+
{ ARGUMENT (Lexing.lexeme lexbuf) }
| [' ' '\t']+
{ argument lexbuf }
| eof
{ EOL }
| _
{ raise Parsing.Parse_error }
and line_argument =
parse
_ *
{ ARGUMENT (Lexing.lexeme lexbuf) }
| eof
{ EOL }
and lexeme = (* Read a lexeme *)
parse
[' ' '\t'] +
{ lexeme lexbuf }
| ['a'-'z' '\223'-'\246' '\248'-'\255' '_']
(['A'-'Z' 'a'-'z' '_' '\192'-'\214' '\216'-'\246' '\248'-'\255'
'\'' '0'-'9' ]) *
{ LIDENT(Lexing.lexeme lexbuf) }
| ['A'-'Z' '\192'-'\214' '\216'-'\222' ]
(['A'-'Z' 'a'-'z' '_' '\192'-'\214' '\216'-'\246' '\248'-'\255'
'\'' '0'-'9' ]) *
{ UIDENT(Lexing.lexeme lexbuf) }
| '"' [^ '"']* "\""
{ let s = Lexing.lexeme lexbuf in
LIDENT(String.sub s 1 (String.length s - 2)) }
| ['0'-'9']+
| '0' ['x' 'X'] ['0'-'9' 'A'-'F' 'a'-'f']+
| '0' ['o' 'O'] ['0'-'7']+
| '0' ['b' 'B'] ['0'-'1']+
{ try INTEGER (Int64.of_string (Lexing.lexeme lexbuf))
with Failure _ -> raise Int_overflow
}
| '*'
{ STAR }
| "-"
{ MINUS }
| "."
{ DOT }
| "#"
{ SHARP }
| "@"
{ AT }
| "$"
{ DOLLAR }
| "!"
{ BANG }
| "("
{ LPAREN }
| ")"
{ RPAREN }
| "["
{ LBRACKET }
| "]"
{ RBRACKET }
| ['!' '?' '~' '=' '<' '>' '|' '&' '$' '@' '^' '+' '-' '*' '/' '%']
['!' '$' '%' '&' '*' '+' '-' '.' '/' ':' '<' '=' '>' '?' '@' '^' '|' '~'] *
{ OPERATOR (Lexing.lexeme lexbuf) }
| eof
{ EOL }
| _
{ raise Parsing.Parse_error }
|