--- /dev/null
+{
+(******************************************************)
+(* Claudio Sacerdoti Coen <sacerdot@cs.unibo.it> *)
+(* 14/05/2000 *)
+(******************************************************)
+
+open Parser
+
+let comment_depth = ref 0;;
+
+let charint_of_lexeme l =
+ String.set l 0 '0' ;
+ int_of_string l
+;;
+}
+
+let digit = ['0'-'9']|['A'-'F']
+
+rule token =
+ parse
+ [' ' '\t' '\n'] { token lexbuf }
+ | "let" { LET }
+ | (['a'-'z']|'_')(['a'-'z']|['A'-'Z']|'_'|['0'-'9']|'\'')*
+ { IDENT (Lexing.lexeme lexbuf) }
+ | '=' { EQ }
+ | ";;" { END_OF_LET }
+ | "|" { PIPE }
+ | '[' { LBRACKET }
+ | ']' { RBRACKET }
+ | '-' { RANGE }
+ | "(*" { incr comment_depth ;
+ comment lexbuf
+ }
+ | "#x" digit digit digit digit { CHAR (charint_of_lexeme (Lexing.lexeme lexbuf)) }
+ | eof { EOF }
+
+and comment =
+ parse
+ "(*" { incr comment_depth ; comment lexbuf }
+ | "*)" { decr comment_depth ;
+ if !comment_depth = 0 then token lexbuf else comment lexbuf
+ }
+ | _ { comment lexbuf }