# 12 "htmllex.mll"
open Lexing
open Lexeme
open Buff
let txt_level = ref 0
and txt_stack = Stack.create "htmllex"
exception Error of string
;;
let error msg lb =
raise (Error msg)
let init table (s,t)= Hashtbl.add table s t
;;
let block = Hashtbl.create 17
;;
List.iter (init block)
["CENTER", () ; "DIV", (); "BLOCKQUOTE", () ;
"H1", () ; "H2", () ;"H3", () ;"H4", () ;"H5", () ;"H6", () ;
"PRE", () ; "TABLE", () ; "TR",() ; "TD", () ; "TH",() ;
"OL",() ; "UL",(); "P",() ; "LI",() ;
"DL",() ; "DT", () ; "DD",() ;
]
;;
let ptop () =
if not (Stack.empty txt_stack) then begin
let pos = Stack.top txt_stack in
Location.print_this_fullpos pos ;
prerr_endline "This opening tag is pending"
end
let warnings = ref true
let check_nesting lb name =
try
Hashtbl.find block (String.uppercase name) ;
if !txt_level <> 0 && !warnings then begin
Location.print_fullpos () ;
prerr_endline
("Warning, block level element: "^name^" nested inside text-level element") ;
ptop ()
end
with
| Not_found -> ()
let text = Hashtbl.create 17
;;
List.iter (init text)
["TT",TT ; "I",I ; "B",B ; "BIG",BIG ; "SMALL",SMALL ;
"STRIKE",STRIKE ; "S",S ; "U",U ; "FONT",FONT ;
"EM",EM ; "STRONG",STRONG ; "DFN",DFN ; "CODE",CODE ; "SAMP",SAMP ;
"KBD",KBD ; "VAR",VAR ; "CITE",CITE ; "ABBR",ABBR ; "ACRONYM",ACRONYM ;
"Q",Q ; "SUB",SUB ; "SUP",SUP ; "A", A ; "SPAN", SPAN ; "SCRIPT", SCRIPT;
"STYLE", STYLE; ]
;;
let is_textlevel name =
try
let _ = Hashtbl.find text (String.uppercase name) in
true
with
| Not_found -> false
let is_br name = "BR" = (String.uppercase name)
let is_basefont name = "BASEFONT" = (String.uppercase name)
let set_basefont attrs lb =
List.iter
(fun (name,v,_) -> match String.uppercase name,v with
| "SIZE",Some s ->
begin try
Emisc.basefont := int_of_string s
with
| _ -> error "BASEFONT syntax" lb
end
| _ -> ())
attrs
let get_value lb = function
| Some s -> s
| _ -> error "Bad attribute syntax" lb
let norm_attrs lb attrs =
List.map
(fun (name,value,txt) ->
match String.uppercase name with
| "SIZE" -> SIZE (get_value lb value),txt
| "COLOR" -> COLOR (get_value lb value),txt
| "FACE" -> FACE (get_value lb value),txt
| _ -> OTHER, txt)
attrs
let print_attrs s attrs =
print_string s ; print_string ":" ;
List.iter
(fun x -> match x with
| name,Some value when name=s ->
print_char ' ' ;
print_string value
| _ -> ())
attrs ;
print_char '\n'
let ouvre lb name attrs txt =
let uname = String.uppercase name in
try
let tag = Hashtbl.find text uname in
let attrs = norm_attrs lb attrs in
incr txt_level ;
Stack.push txt_stack (Location.get_pos ()) ;
Open (tag, attrs,txt)
with
| Not_found -> assert false
and ferme lb name txt =
try
let tag = Hashtbl.find text (String.uppercase name) in
decr txt_level ;
begin if not (Stack.empty txt_stack) then
let _ = Stack.pop txt_stack in ()
end ;
Close (tag,txt)
with
| Not_found -> Text txt
let unquote s =
let l = String.length s in
String.sub s 1 (l-2)
;;
let buff = Buff.create ()
and abuff = Buff.create ()
let put s = Buff.put buff s
and putc c = Buff.put_char buff c
let aput s = Buff.put abuff s
and aputc c = Buff.put_char abuff c
# 158 "htmllex.ml"
let __ocaml_lex_tables = {
Lexing.lex_base =
"\000\000\249\255\250\255\000\000\035\000\002\000\036\000\026\000\
\027\000\011\000\015\000\000\000\010\000\002\000\082\000\160\000\
\000\000\001\000\254\255\235\000\113\000\255\255\093\001\253\255\
\171\001\007\000\095\001\009\000\029\002\028\002\108\002\188\002\
\107\000\135\000\255\255\114\000\130\000\017\000\001\000\004\000\
\046\003\128\000\048\003\051\003\129\000\252\255\053\003\006\001\
\056\003\253\255\117\000\251\255\118\000\133\003\009\004\019\000\
\047\000\064\001\048\000\032\000\157\000\231\000\098\004\178\004\
\002\005\110\000\184\000\091\005\171\005\029\006\107\006\102\001\
\221\006\043\007\034\002\157\007\252\255\033\000\015\008\129\008\
\036\002\043\002\058\003\243\008\101\009\215\009\073\010\063\003\
\089\003";
Lexing.lex_backtrk =
"\255\255\255\255\255\255\006\000\006\000\000\000\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\003\000\
\002\000\255\255\255\255\004\000\001\000\255\255\003\000\255\255\
\001\000\000\000\001\000\000\000\255\255\002\000\001\000\255\255\
\255\255\255\255\255\255\255\255\255\255\001\000\255\255\000\000\
\255\255\255\255\255\255\000\000\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\003\000\255\255\002\000\001\000\
\255\255\255\255\001\000\255\255\255\255\255\255\001\000\000\000\
\255\255\255\255\255\255\003\000\000\000\003\000\001\000\000\000\
\003\000\001\000\000\000\004\000\255\255\255\255\000\000\000\000\
\000\000\002\000\255\255\000\000\000\000\000\000\000\000\001\000\
\255\255";
Lexing.lex_default =
"\001\000\000\000\000\000\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\000\000\255\255\021\000\000\000\255\255\000\000\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\032\000\033\000\000\000\018\000\018\000\255\255\255\255\255\255\
\041\000\041\000\046\000\041\000\044\000\000\000\046\000\047\000\
\041\000\000\000\052\000\000\000\052\000\255\255\255\255\255\255\
\255\255\018\000\255\255\255\255\061\000\061\000\255\255\255\255\
\255\255\065\000\066\000\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\000\000\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255";
Lexing.lex_trans =
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\005\000\005\000\005\000\005\000\005\000\021\000\005\000\
\025\000\025\000\027\000\027\000\025\000\000\000\027\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\005\000\016\000\005\000\000\000\000\000\000\000\004\000\025\000\
\006\000\027\000\000\000\000\000\000\000\017\000\018\000\014\000\
\015\000\015\000\015\000\015\000\015\000\015\000\015\000\015\000\
\015\000\015\000\013\000\005\000\003\000\005\000\038\000\039\000\
\056\000\015\000\015\000\015\000\015\000\015\000\015\000\015\000\
\015\000\015\000\015\000\015\000\015\000\015\000\015\000\015\000\
\015\000\015\000\015\000\015\000\015\000\015\000\015\000\015\000\
\015\000\015\000\015\000\012\000\021\000\059\000\021\000\076\000\
\000\000\015\000\015\000\015\000\015\000\015\000\015\000\015\000\
\015\000\015\000\015\000\015\000\015\000\015\000\015\000\015\000\
\015\000\015\000\015\000\015\000\015\000\015\000\015\000\015\000\
\015\000\015\000\015\000\007\000\007\000\009\000\010\000\011\000\
\000\000\000\000\019\000\019\000\019\000\019\000\019\000\019\000\
\019\000\019\000\019\000\019\000\000\000\034\000\000\000\000\000\
\021\000\008\000\008\000\019\000\019\000\019\000\019\000\019\000\
\019\000\019\000\019\000\019\000\019\000\019\000\019\000\019\000\
\019\000\019\000\019\000\019\000\019\000\019\000\019\000\019\000\
\019\000\019\000\019\000\019\000\019\000\255\255\034\000\037\000\
\021\000\053\000\255\255\019\000\019\000\019\000\019\000\019\000\
\019\000\019\000\019\000\019\000\019\000\019\000\019\000\019\000\
\019\000\019\000\019\000\019\000\019\000\019\000\019\000\019\000\
\019\000\019\000\019\000\019\000\019\000\000\000\000\000\000\000\
\015\000\015\000\015\000\015\000\015\000\015\000\015\000\015\000\
\015\000\015\000\000\000\021\000\000\000\000\000\000\000\021\000\
\000\000\015\000\015\000\015\000\015\000\015\000\015\000\015\000\
\015\000\015\000\015\000\015\000\015\000\015\000\015\000\015\000\
\015\000\015\000\015\000\015\000\015\000\015\000\015\000\015\000\
\015\000\015\000\015\000\044\000\000\000\000\000\045\000\000\000\
\002\000\015\000\015\000\015\000\015\000\015\000\015\000\015\000\
\015\000\015\000\015\000\015\000\015\000\015\000\015\000\015\000\
\015\000\015\000\015\000\015\000\015\000\015\000\015\000\015\000\
\015\000\015\000\015\000\019\000\019\000\019\000\019\000\019\000\
\019\000\019\000\019\000\019\000\019\000\021\000\000\000\000\000\
\000\000\000\000\000\000\000\000\019\000\019\000\019\000\019\000\
\019\000\019\000\019\000\019\000\019\000\019\000\019\000\019\000\
\019\000\019\000\019\000\019\000\019\000\019\000\019\000\019\000\
\019\000\019\000\019\000\019\000\019\000\019\000\000\000\000\000\
\000\000\000\000\000\000\000\000\019\000\019\000\019\000\019\000\
\019\000\019\000\019\000\019\000\019\000\019\000\019\000\019\000\
\019\000\019\000\019\000\019\000\019\000\019\000\019\000\019\000\
\019\000\019\000\019\000\019\000\019\000\019\000\025\000\025\000\
\028\000\028\000\025\000\255\255\028\000\058\000\255\255\071\000\
\071\000\255\255\023\000\071\000\000\000\051\000\255\255\000\000\
\000\000\000\000\000\000\000\000\000\000\025\000\000\000\028\000\
\255\255\255\255\023\000\049\000\000\000\000\000\071\000\255\255\
\000\000\000\000\024\000\000\000\000\000\024\000\024\000\024\000\
\024\000\024\000\024\000\024\000\024\000\024\000\024\000\000\000\
\000\000\000\000\000\000\023\000\027\000\018\000\024\000\024\000\
\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
\255\255\000\000\000\000\000\000\000\000\000\000\024\000\024\000\
\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
\024\000\000\000\000\000\024\000\024\000\024\000\024\000\024\000\
\024\000\024\000\024\000\024\000\024\000\000\000\000\000\255\255\
\000\000\000\000\000\000\000\000\024\000\024\000\024\000\024\000\
\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
\024\000\024\000\024\000\024\000\024\000\024\000\255\255\000\000\
\000\000\000\000\000\000\000\000\024\000\024\000\024\000\024\000\
\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
\024\000\024\000\024\000\024\000\024\000\024\000\028\000\028\000\
\000\000\000\000\028\000\074\000\074\000\080\000\080\000\074\000\
\000\000\080\000\000\000\000\000\081\000\081\000\000\000\000\000\
\081\000\000\000\000\000\000\000\000\000\028\000\032\000\031\000\
\023\000\000\000\074\000\033\000\080\000\000\000\000\000\030\000\
\000\000\030\000\030\000\081\000\030\000\030\000\030\000\030\000\
\030\000\030\000\030\000\030\000\030\000\030\000\030\000\000\000\
\000\000\000\000\027\000\000\000\000\000\030\000\030\000\030\000\
\030\000\030\000\030\000\030\000\030\000\030\000\030\000\030\000\
\030\000\030\000\030\000\030\000\030\000\030\000\030\000\030\000\
\030\000\030\000\030\000\030\000\030\000\030\000\030\000\000\000\
\000\000\000\000\000\000\030\000\000\000\030\000\030\000\030\000\
\030\000\030\000\030\000\030\000\030\000\030\000\030\000\030\000\
\030\000\030\000\030\000\030\000\030\000\030\000\030\000\030\000\
\030\000\030\000\030\000\030\000\030\000\030\000\030\000\030\000\
\000\000\030\000\030\000\000\000\030\000\030\000\030\000\030\000\
\030\000\030\000\030\000\030\000\030\000\030\000\030\000\000\000\
\000\000\000\000\000\000\000\000\000\000\030\000\030\000\030\000\
\030\000\030\000\030\000\030\000\030\000\030\000\030\000\030\000\
\030\000\030\000\030\000\030\000\030\000\030\000\030\000\030\000\
\030\000\030\000\030\000\030\000\030\000\030\000\030\000\000\000\
\000\000\000\000\000\000\030\000\000\000\030\000\030\000\030\000\
\030\000\030\000\030\000\030\000\030\000\030\000\030\000\030\000\
\030\000\030\000\030\000\030\000\030\000\030\000\030\000\030\000\
\030\000\030\000\030\000\030\000\030\000\030\000\030\000\030\000\
\000\000\030\000\030\000\000\000\030\000\030\000\030\000\030\000\
\030\000\030\000\030\000\030\000\030\000\030\000\030\000\000\000\
\000\000\000\000\000\000\000\000\000\000\030\000\030\000\030\000\
\030\000\030\000\030\000\030\000\030\000\030\000\030\000\030\000\
\030\000\030\000\030\000\030\000\030\000\030\000\030\000\030\000\
\030\000\030\000\030\000\030\000\030\000\030\000\030\000\000\000\
\000\000\000\000\000\000\030\000\000\000\030\000\030\000\030\000\
\030\000\030\000\030\000\030\000\030\000\030\000\030\000\030\000\
\030\000\030\000\030\000\030\000\030\000\030\000\030\000\030\000\
\030\000\030\000\030\000\030\000\030\000\030\000\030\000\043\000\
\043\000\041\000\041\000\043\000\043\000\043\000\048\000\048\000\
\043\000\048\000\048\000\082\000\082\000\048\000\000\000\082\000\
\087\000\087\000\000\000\000\000\087\000\000\000\043\000\000\000\
\041\000\000\000\000\000\043\000\000\000\048\000\000\000\000\000\
\048\000\000\000\082\000\000\000\042\000\000\000\000\000\087\000\
\000\000\042\000\088\000\088\000\000\000\000\000\088\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\081\000\
\000\000\088\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\087\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\055\000\000\000\
\000\000\255\255\000\000\044\000\000\000\000\000\044\000\000\000\
\047\000\000\000\000\000\047\000\018\000\054\000\054\000\054\000\
\054\000\054\000\054\000\054\000\054\000\054\000\054\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\054\000\054\000\
\054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\
\054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\
\054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\
\000\000\000\000\000\000\000\000\000\000\000\000\054\000\054\000\
\054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\
\054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\
\054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\018\000\000\000\
\255\255\000\000\000\000\255\255\000\000\255\255\000\000\000\000\
\255\255\054\000\054\000\054\000\054\000\054\000\054\000\054\000\
\054\000\054\000\054\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\054\000\054\000\054\000\054\000\054\000\054\000\
\054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\
\054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\
\054\000\054\000\054\000\054\000\000\000\000\000\000\000\000\000\
\000\000\000\000\054\000\054\000\054\000\054\000\054\000\054\000\
\054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\
\054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\
\054\000\054\000\054\000\054\000\065\000\064\000\000\000\000\000\
\000\000\066\000\000\000\000\000\000\000\063\000\000\000\063\000\
\063\000\000\000\063\000\063\000\063\000\063\000\063\000\063\000\
\063\000\063\000\063\000\063\000\063\000\000\000\000\000\000\000\
\000\000\000\000\000\000\063\000\063\000\063\000\063\000\063\000\
\063\000\063\000\063\000\063\000\063\000\063\000\063\000\063\000\
\063\000\063\000\063\000\063\000\063\000\063\000\063\000\063\000\
\063\000\063\000\063\000\063\000\063\000\000\000\000\000\000\000\
\000\000\063\000\000\000\063\000\063\000\063\000\063\000\063\000\
\063\000\063\000\063\000\063\000\063\000\063\000\063\000\063\000\
\063\000\063\000\063\000\063\000\063\000\063\000\063\000\063\000\
\063\000\063\000\063\000\063\000\063\000\063\000\000\000\063\000\
\063\000\000\000\063\000\063\000\063\000\063\000\063\000\063\000\
\063\000\063\000\063\000\063\000\063\000\000\000\000\000\000\000\
\000\000\000\000\000\000\063\000\063\000\063\000\063\000\063\000\
\063\000\063\000\063\000\063\000\063\000\063\000\063\000\063\000\
\063\000\063\000\063\000\063\000\063\000\063\000\063\000\063\000\
\063\000\063\000\063\000\063\000\063\000\000\000\000\000\000\000\
\000\000\063\000\000\000\063\000\063\000\063\000\063\000\063\000\
\063\000\063\000\063\000\063\000\063\000\063\000\063\000\063\000\
\063\000\063\000\063\000\063\000\063\000\063\000\063\000\063\000\
\063\000\063\000\063\000\063\000\063\000\063\000\000\000\063\000\
\063\000\000\000\063\000\063\000\063\000\063\000\063\000\063\000\
\063\000\063\000\063\000\063\000\063\000\000\000\000\000\000\000\
\000\000\000\000\000\000\063\000\063\000\063\000\063\000\063\000\
\063\000\063\000\063\000\063\000\063\000\063\000\063\000\063\000\
\063\000\063\000\063\000\063\000\063\000\063\000\063\000\063\000\
\063\000\063\000\063\000\063\000\063\000\000\000\000\000\000\000\
\000\000\063\000\000\000\063\000\063\000\063\000\063\000\063\000\
\063\000\063\000\063\000\063\000\063\000\063\000\063\000\063\000\
\063\000\063\000\063\000\063\000\063\000\063\000\063\000\063\000\
\063\000\063\000\063\000\063\000\063\000\023\000\000\000\000\000\
\000\000\000\000\018\000\000\000\000\000\000\000\068\000\000\000\
\068\000\068\000\000\000\068\000\068\000\068\000\068\000\068\000\
\068\000\068\000\068\000\068\000\068\000\068\000\000\000\000\000\
\000\000\000\000\000\000\000\000\068\000\068\000\068\000\068\000\
\068\000\068\000\068\000\068\000\068\000\068\000\068\000\068\000\
\068\000\068\000\068\000\068\000\068\000\068\000\068\000\068\000\
\068\000\068\000\068\000\068\000\068\000\068\000\000\000\000\000\
\000\000\000\000\068\000\000\000\068\000\068\000\068\000\068\000\
\068\000\068\000\068\000\068\000\068\000\068\000\068\000\068\000\
\068\000\068\000\068\000\068\000\068\000\068\000\068\000\068\000\
\068\000\068\000\068\000\068\000\068\000\068\000\068\000\000\000\
\068\000\068\000\000\000\068\000\068\000\068\000\068\000\068\000\
\068\000\068\000\068\000\068\000\068\000\068\000\000\000\000\000\
\000\000\000\000\000\000\000\000\068\000\068\000\068\000\068\000\
\068\000\068\000\068\000\068\000\068\000\068\000\068\000\068\000\
\068\000\068\000\068\000\068\000\068\000\068\000\068\000\068\000\
\068\000\068\000\068\000\068\000\068\000\068\000\000\000\000\000\
\000\000\000\000\068\000\000\000\068\000\068\000\068\000\068\000\
\068\000\068\000\068\000\068\000\068\000\068\000\068\000\068\000\
\068\000\068\000\068\000\068\000\068\000\068\000\068\000\068\000\
\068\000\068\000\068\000\068\000\068\000\068\000\071\000\071\000\
\000\000\000\000\071\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\071\000\000\000\000\000\
\000\000\000\000\000\000\000\000\023\000\000\000\000\000\000\000\
\000\000\000\000\070\000\000\000\000\000\070\000\070\000\070\000\
\070\000\070\000\070\000\070\000\070\000\070\000\070\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\070\000\070\000\
\070\000\070\000\070\000\070\000\070\000\070\000\070\000\070\000\
\070\000\070\000\070\000\070\000\070\000\070\000\070\000\070\000\
\070\000\070\000\070\000\070\000\070\000\070\000\070\000\070\000\
\000\000\000\000\000\000\000\000\000\000\000\000\070\000\070\000\
\070\000\070\000\070\000\070\000\070\000\070\000\070\000\070\000\
\070\000\070\000\070\000\070\000\070\000\070\000\070\000\070\000\
\070\000\070\000\070\000\070\000\070\000\070\000\070\000\070\000\
\070\000\000\000\000\000\070\000\070\000\070\000\070\000\070\000\
\070\000\070\000\070\000\070\000\070\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\070\000\070\000\070\000\070\000\
\070\000\070\000\070\000\070\000\070\000\070\000\070\000\070\000\
\070\000\070\000\070\000\070\000\070\000\070\000\070\000\070\000\
\070\000\070\000\070\000\070\000\070\000\070\000\000\000\000\000\
\000\000\000\000\000\000\000\000\070\000\070\000\070\000\070\000\
\070\000\070\000\070\000\070\000\070\000\070\000\070\000\070\000\
\070\000\070\000\070\000\070\000\070\000\070\000\070\000\070\000\
\070\000\070\000\070\000\070\000\070\000\070\000\074\000\074\000\
\000\000\000\000\074\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\074\000\000\000\023\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\073\000\000\000\000\000\073\000\073\000\073\000\
\073\000\073\000\073\000\073\000\073\000\073\000\073\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\073\000\073\000\
\073\000\073\000\073\000\073\000\073\000\073\000\073\000\073\000\
\073\000\073\000\073\000\073\000\073\000\073\000\073\000\073\000\
\073\000\073\000\073\000\073\000\073\000\073\000\073\000\073\000\
\000\000\000\000\000\000\000\000\000\000\000\000\073\000\073\000\
\073\000\073\000\073\000\073\000\073\000\073\000\073\000\073\000\
\073\000\073\000\073\000\073\000\073\000\073\000\073\000\073\000\
\073\000\073\000\073\000\073\000\073\000\073\000\073\000\073\000\
\073\000\000\000\000\000\073\000\073\000\073\000\073\000\073\000\
\073\000\073\000\073\000\073\000\073\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\073\000\073\000\073\000\073\000\
\073\000\073\000\073\000\073\000\073\000\073\000\073\000\073\000\
\073\000\073\000\073\000\073\000\073\000\073\000\073\000\073\000\
\073\000\073\000\073\000\073\000\073\000\073\000\000\000\000\000\
\000\000\000\000\000\000\000\000\073\000\073\000\073\000\073\000\
\073\000\073\000\073\000\073\000\073\000\073\000\073\000\073\000\
\073\000\073\000\073\000\073\000\073\000\073\000\073\000\073\000\
\073\000\073\000\073\000\073\000\073\000\073\000\080\000\080\000\
\000\000\000\000\080\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\080\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\078\000\000\000\077\000\078\000\078\000\078\000\
\078\000\078\000\078\000\078\000\078\000\078\000\078\000\000\000\
\000\000\000\000\000\000\076\000\000\000\000\000\078\000\078\000\
\079\000\078\000\078\000\078\000\078\000\078\000\078\000\078\000\
\078\000\078\000\078\000\078\000\078\000\078\000\078\000\078\000\
\078\000\078\000\078\000\078\000\078\000\078\000\078\000\078\000\
\000\000\000\000\000\000\000\000\000\000\000\000\078\000\078\000\
\079\000\078\000\078\000\078\000\078\000\078\000\078\000\078\000\
\078\000\078\000\078\000\078\000\078\000\078\000\078\000\078\000\
\078\000\078\000\078\000\078\000\078\000\078\000\078\000\078\000\
\082\000\082\000\000\000\000\000\082\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\082\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\078\000\000\000\000\000\078\000\
\078\000\078\000\078\000\078\000\078\000\078\000\078\000\078\000\
\078\000\000\000\000\000\000\000\081\000\000\000\000\000\000\000\
\078\000\078\000\078\000\078\000\078\000\078\000\078\000\078\000\
\078\000\078\000\078\000\078\000\078\000\078\000\078\000\078\000\
\078\000\078\000\078\000\078\000\078\000\078\000\078\000\078\000\
\078\000\078\000\000\000\000\000\000\000\000\000\000\000\000\000\
\078\000\078\000\078\000\078\000\078\000\078\000\078\000\078\000\
\078\000\078\000\078\000\078\000\078\000\078\000\078\000\078\000\
\078\000\078\000\078\000\078\000\078\000\078\000\078\000\078\000\
\078\000\078\000\082\000\082\000\000\000\000\000\082\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\082\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\078\000\000\000\
\000\000\078\000\078\000\078\000\078\000\078\000\078\000\078\000\
\078\000\078\000\078\000\000\000\000\000\000\000\081\000\000\000\
\000\000\000\000\078\000\078\000\078\000\078\000\078\000\078\000\
\078\000\078\000\078\000\078\000\078\000\083\000\078\000\078\000\
\078\000\078\000\078\000\078\000\078\000\078\000\078\000\078\000\
\078\000\078\000\078\000\078\000\000\000\000\000\000\000\000\000\
\000\000\000\000\078\000\078\000\078\000\078\000\078\000\078\000\
\078\000\078\000\078\000\078\000\078\000\083\000\078\000\078\000\
\078\000\078\000\078\000\078\000\078\000\078\000\078\000\078\000\
\078\000\078\000\078\000\078\000\082\000\082\000\000\000\000\000\
\082\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\082\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\078\000\000\000\000\000\078\000\078\000\078\000\078\000\078\000\
\078\000\078\000\078\000\078\000\078\000\000\000\000\000\000\000\
\081\000\000\000\000\000\000\000\084\000\078\000\078\000\078\000\
\078\000\078\000\078\000\078\000\078\000\078\000\078\000\078\000\
\078\000\078\000\078\000\078\000\078\000\078\000\078\000\078\000\
\078\000\078\000\078\000\078\000\078\000\078\000\000\000\000\000\
\000\000\000\000\000\000\000\000\084\000\078\000\078\000\078\000\
\078\000\078\000\078\000\078\000\078\000\078\000\078\000\078\000\
\078\000\078\000\078\000\078\000\078\000\078\000\078\000\078\000\
\078\000\078\000\078\000\078\000\078\000\078\000\082\000\082\000\
\000\000\000\000\082\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\082\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\078\000\000\000\000\000\078\000\078\000\078\000\
\078\000\078\000\078\000\078\000\078\000\078\000\078\000\000\000\
\000\000\000\000\081\000\000\000\000\000\000\000\078\000\078\000\
\078\000\078\000\078\000\078\000\078\000\078\000\078\000\078\000\
\078\000\078\000\078\000\078\000\078\000\078\000\078\000\078\000\
\085\000\078\000\078\000\078\000\078\000\078\000\078\000\078\000\
\000\000\000\000\000\000\000\000\000\000\000\000\078\000\078\000\
\078\000\078\000\078\000\078\000\078\000\078\000\078\000\078\000\
\078\000\078\000\078\000\078\000\078\000\078\000\078\000\078\000\
\085\000\078\000\078\000\078\000\078\000\078\000\078\000\078\000\
\082\000\082\000\000\000\000\000\082\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\082\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\078\000\000\000\000\000\078\000\
\078\000\078\000\078\000\078\000\078\000\078\000\078\000\078\000\
\078\000\000\000\000\000\000\000\081\000\000\000\000\000\000\000\
\078\000\078\000\078\000\078\000\078\000\078\000\078\000\078\000\
\078\000\078\000\078\000\078\000\078\000\078\000\078\000\078\000\
\078\000\078\000\086\000\078\000\078\000\078\000\078\000\078\000\
\078\000\078\000\000\000\000\000\000\000\000\000\000\000\000\000\
\078\000\078\000\078\000\078\000\078\000\078\000\078\000\078\000\
\078\000\078\000\078\000\078\000\078\000\078\000\078\000\078\000\
\078\000\078\000\086\000\078\000\078\000\078\000\078\000\078\000\
\078\000\078\000\088\000\088\000\000\000\000\000\088\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\088\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\078\000\000\000\
\000\000\078\000\078\000\078\000\078\000\078\000\078\000\078\000\
\078\000\078\000\078\000\000\000\000\000\000\000\087\000\000\000\
\000\000\000\000\078\000\078\000\078\000\078\000\078\000\078\000\
\078\000\078\000\078\000\078\000\078\000\078\000\078\000\078\000\
\078\000\078\000\078\000\078\000\078\000\078\000\078\000\078\000\
\078\000\078\000\078\000\078\000\000\000\000\000\000\000\000\000\
\000\000\000\000\078\000\078\000\078\000\078\000\078\000\078\000\
\078\000\078\000\078\000\078\000\078\000\078\000\078\000\078\000\
\078\000\078\000\078\000\078\000\078\000\078\000\078\000\078\000\
\078\000\078\000\078\000\078\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000";
Lexing.lex_check =
"\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\000\000\000\000\005\000\005\000\000\000\039\000\005\000\
\025\000\025\000\027\000\027\000\025\000\255\255\027\000\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\000\000\003\000\005\000\255\255\255\255\255\255\000\000\025\000\
\005\000\027\000\255\255\255\255\255\255\016\000\017\000\003\000\
\003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\
\003\000\003\000\012\000\011\000\000\000\013\000\037\000\038\000\
\055\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\
\003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\
\003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\
\003\000\003\000\003\000\007\000\056\000\058\000\059\000\077\000\
\255\255\003\000\003\000\003\000\003\000\003\000\003\000\003\000\
\003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\
\003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\
\003\000\003\000\003\000\004\000\006\000\008\000\009\000\010\000\
\255\255\255\255\014\000\014\000\014\000\014\000\014\000\014\000\
\014\000\014\000\014\000\014\000\255\255\032\000\255\255\255\255\
\065\000\004\000\006\000\014\000\014\000\014\000\014\000\014\000\
\014\000\014\000\014\000\014\000\014\000\014\000\014\000\014\000\
\014\000\014\000\014\000\014\000\014\000\014\000\014\000\014\000\
\014\000\014\000\014\000\014\000\014\000\020\000\033\000\036\000\
\035\000\050\000\052\000\014\000\014\000\014\000\014\000\014\000\
\014\000\014\000\014\000\014\000\014\000\014\000\014\000\014\000\
\014\000\014\000\014\000\014\000\014\000\014\000\014\000\014\000\
\014\000\014\000\014\000\014\000\014\000\255\255\255\255\255\255\
\015\000\015\000\015\000\015\000\015\000\015\000\015\000\015\000\
\015\000\015\000\255\255\060\000\255\255\255\255\255\255\066\000\
\255\255\015\000\015\000\015\000\015\000\015\000\015\000\015\000\
\015\000\015\000\015\000\015\000\015\000\015\000\015\000\015\000\
\015\000\015\000\015\000\015\000\015\000\015\000\015\000\015\000\
\015\000\015\000\015\000\041\000\255\255\255\255\044\000\255\255\
\000\000\015\000\015\000\015\000\015\000\015\000\015\000\015\000\
\015\000\015\000\015\000\015\000\015\000\015\000\015\000\015\000\
\015\000\015\000\015\000\015\000\015\000\015\000\015\000\015\000\
\015\000\015\000\015\000\019\000\019\000\019\000\019\000\019\000\
\019\000\019\000\019\000\019\000\019\000\061\000\255\255\255\255\
\255\255\255\255\255\255\255\255\019\000\019\000\019\000\019\000\
\019\000\019\000\019\000\019\000\019\000\019\000\019\000\019\000\
\019\000\019\000\019\000\019\000\019\000\019\000\019\000\019\000\
\019\000\019\000\019\000\019\000\019\000\019\000\255\255\255\255\
\255\255\255\255\255\255\255\255\019\000\019\000\019\000\019\000\
\019\000\019\000\019\000\019\000\019\000\019\000\019\000\019\000\
\019\000\019\000\019\000\019\000\019\000\019\000\019\000\019\000\
\019\000\019\000\019\000\019\000\019\000\019\000\022\000\022\000\
\026\000\026\000\022\000\032\000\026\000\057\000\065\000\071\000\
\071\000\020\000\035\000\071\000\255\255\050\000\052\000\255\255\
\255\255\255\255\255\255\255\255\255\255\022\000\255\255\026\000\
\041\000\044\000\036\000\047\000\255\255\255\255\071\000\033\000\
\255\255\255\255\022\000\255\255\255\255\022\000\022\000\022\000\
\022\000\022\000\022\000\022\000\022\000\022\000\022\000\255\255\
\255\255\255\255\255\255\022\000\026\000\060\000\022\000\022\000\
\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\
\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\
\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\
\066\000\255\255\255\255\255\255\255\255\255\255\022\000\022\000\
\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\
\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\
\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\
\024\000\255\255\255\255\024\000\024\000\024\000\024\000\024\000\
\024\000\024\000\024\000\024\000\024\000\255\255\255\255\061\000\
\255\255\255\255\255\255\255\255\024\000\024\000\024\000\024\000\
\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
\024\000\024\000\024\000\024\000\024\000\024\000\047\000\255\255\
\255\255\255\255\255\255\255\255\024\000\024\000\024\000\024\000\
\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
\024\000\024\000\024\000\024\000\024\000\024\000\028\000\028\000\
\255\255\255\255\028\000\074\000\074\000\080\000\080\000\074\000\
\255\255\080\000\255\255\255\255\081\000\081\000\255\255\255\255\
\081\000\255\255\255\255\255\255\255\255\028\000\029\000\029\000\
\057\000\255\255\074\000\029\000\080\000\255\255\255\255\029\000\
\255\255\029\000\029\000\081\000\029\000\029\000\029\000\029\000\
\029\000\029\000\029\000\029\000\029\000\029\000\029\000\255\255\
\255\255\255\255\028\000\255\255\255\255\029\000\029\000\029\000\
\029\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\
\029\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\
\029\000\029\000\029\000\029\000\029\000\029\000\029\000\255\255\
\255\255\255\255\255\255\029\000\255\255\029\000\029\000\029\000\
\029\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\
\029\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\
\029\000\029\000\029\000\029\000\029\000\029\000\029\000\030\000\
\255\255\030\000\030\000\255\255\030\000\030\000\030\000\030\000\
\030\000\030\000\030\000\030\000\030\000\030\000\030\000\255\255\
\255\255\255\255\255\255\255\255\255\255\030\000\030\000\030\000\
\030\000\030\000\030\000\030\000\030\000\030\000\030\000\030\000\
\030\000\030\000\030\000\030\000\030\000\030\000\030\000\030\000\
\030\000\030\000\030\000\030\000\030\000\030\000\030\000\255\255\
\255\255\255\255\255\255\030\000\255\255\030\000\030\000\030\000\
\030\000\030\000\030\000\030\000\030\000\030\000\030\000\030\000\
\030\000\030\000\030\000\030\000\030\000\030\000\030\000\030\000\
\030\000\030\000\030\000\030\000\030\000\030\000\030\000\031\000\
\255\255\031\000\031\000\255\255\031\000\031\000\031\000\031\000\
\031\000\031\000\031\000\031\000\031\000\031\000\031\000\255\255\
\255\255\255\255\255\255\255\255\255\255\031\000\031\000\031\000\
\031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
\031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
\031\000\031\000\031\000\031\000\031\000\031\000\031\000\255\255\
\255\255\255\255\255\255\031\000\255\255\031\000\031\000\031\000\
\031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
\031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
\031\000\031\000\031\000\031\000\031\000\031\000\031\000\040\000\
\040\000\042\000\042\000\040\000\043\000\043\000\046\000\046\000\
\043\000\048\000\048\000\082\000\082\000\048\000\255\255\082\000\
\087\000\087\000\255\255\255\255\087\000\255\255\040\000\255\255\
\042\000\255\255\255\255\043\000\255\255\046\000\255\255\255\255\
\048\000\255\255\082\000\255\255\040\000\255\255\255\255\087\000\
\255\255\043\000\088\000\088\000\255\255\255\255\088\000\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\082\000\
\255\255\088\000\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\088\000\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\053\000\255\255\
\255\255\040\000\255\255\042\000\255\255\255\255\043\000\255\255\
\046\000\255\255\255\255\048\000\053\000\053\000\053\000\053\000\
\053\000\053\000\053\000\053\000\053\000\053\000\053\000\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\053\000\053\000\
\053\000\053\000\053\000\053\000\053\000\053\000\053\000\053\000\
\053\000\053\000\053\000\053\000\053\000\053\000\053\000\053\000\
\053\000\053\000\053\000\053\000\053\000\053\000\053\000\053\000\
\255\255\255\255\255\255\255\255\255\255\255\255\053\000\053\000\
\053\000\053\000\053\000\053\000\053\000\053\000\053\000\053\000\
\053\000\053\000\053\000\053\000\053\000\053\000\053\000\053\000\
\053\000\053\000\053\000\053\000\053\000\053\000\053\000\053\000\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\040\000\255\255\
\042\000\255\255\255\255\043\000\255\255\046\000\255\255\255\255\
\048\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\
\054\000\054\000\054\000\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\054\000\054\000\054\000\054\000\054\000\054\000\
\054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\
\054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\
\054\000\054\000\054\000\054\000\255\255\255\255\255\255\255\255\
\255\255\255\255\054\000\054\000\054\000\054\000\054\000\054\000\
\054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\
\054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\
\054\000\054\000\054\000\054\000\062\000\062\000\255\255\255\255\
\255\255\062\000\255\255\255\255\255\255\062\000\255\255\062\000\
\062\000\255\255\062\000\062\000\062\000\062\000\062\000\062\000\
\062\000\062\000\062\000\062\000\062\000\255\255\255\255\255\255\
\255\255\255\255\255\255\062\000\062\000\062\000\062\000\062\000\
\062\000\062\000\062\000\062\000\062\000\062\000\062\000\062\000\
\062\000\062\000\062\000\062\000\062\000\062\000\062\000\062\000\
\062\000\062\000\062\000\062\000\062\000\255\255\255\255\255\255\
\255\255\062\000\255\255\062\000\062\000\062\000\062\000\062\000\
\062\000\062\000\062\000\062\000\062\000\062\000\062\000\062\000\
\062\000\062\000\062\000\062\000\062\000\062\000\062\000\062\000\
\062\000\062\000\062\000\062\000\062\000\063\000\255\255\063\000\
\063\000\255\255\063\000\063\000\063\000\063\000\063\000\063\000\
\063\000\063\000\063\000\063\000\063\000\255\255\255\255\255\255\
\255\255\255\255\255\255\063\000\063\000\063\000\063\000\063\000\
\063\000\063\000\063\000\063\000\063\000\063\000\063\000\063\000\
\063\000\063\000\063\000\063\000\063\000\063\000\063\000\063\000\
\063\000\063\000\063\000\063\000\063\000\255\255\255\255\255\255\
\255\255\063\000\255\255\063\000\063\000\063\000\063\000\063\000\
\063\000\063\000\063\000\063\000\063\000\063\000\063\000\063\000\
\063\000\063\000\063\000\063\000\063\000\063\000\063\000\063\000\
\063\000\063\000\063\000\063\000\063\000\064\000\255\255\064\000\
\064\000\255\255\064\000\064\000\064\000\064\000\064\000\064\000\
\064\000\064\000\064\000\064\000\064\000\255\255\255\255\255\255\
\255\255\255\255\255\255\064\000\064\000\064\000\064\000\064\000\
\064\000\064\000\064\000\064\000\064\000\064\000\064\000\064\000\
\064\000\064\000\064\000\064\000\064\000\064\000\064\000\064\000\
\064\000\064\000\064\000\064\000\064\000\255\255\255\255\255\255\
\255\255\064\000\255\255\064\000\064\000\064\000\064\000\064\000\
\064\000\064\000\064\000\064\000\064\000\064\000\064\000\064\000\
\064\000\064\000\064\000\064\000\064\000\064\000\064\000\064\000\
\064\000\064\000\064\000\064\000\064\000\067\000\255\255\255\255\
\255\255\255\255\067\000\255\255\255\255\255\255\067\000\255\255\
\067\000\067\000\255\255\067\000\067\000\067\000\067\000\067\000\
\067\000\067\000\067\000\067\000\067\000\067\000\255\255\255\255\
\255\255\255\255\255\255\255\255\067\000\067\000\067\000\067\000\
\067\000\067\000\067\000\067\000\067\000\067\000\067\000\067\000\
\067\000\067\000\067\000\067\000\067\000\067\000\067\000\067\000\
\067\000\067\000\067\000\067\000\067\000\067\000\255\255\255\255\
\255\255\255\255\067\000\255\255\067\000\067\000\067\000\067\000\
\067\000\067\000\067\000\067\000\067\000\067\000\067\000\067\000\
\067\000\067\000\067\000\067\000\067\000\067\000\067\000\067\000\
\067\000\067\000\067\000\067\000\067\000\067\000\068\000\255\255\
\068\000\068\000\255\255\068\000\068\000\068\000\068\000\068\000\
\068\000\068\000\068\000\068\000\068\000\068\000\255\255\255\255\
\255\255\255\255\255\255\255\255\068\000\068\000\068\000\068\000\
\068\000\068\000\068\000\068\000\068\000\068\000\068\000\068\000\
\068\000\068\000\068\000\068\000\068\000\068\000\068\000\068\000\
\068\000\068\000\068\000\068\000\068\000\068\000\255\255\255\255\
\255\255\255\255\068\000\255\255\068\000\068\000\068\000\068\000\
\068\000\068\000\068\000\068\000\068\000\068\000\068\000\068\000\
\068\000\068\000\068\000\068\000\068\000\068\000\068\000\068\000\
\068\000\068\000\068\000\068\000\068\000\068\000\069\000\069\000\
\255\255\255\255\069\000\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\069\000\255\255\255\255\
\255\255\255\255\255\255\255\255\069\000\255\255\255\255\255\255\
\255\255\255\255\069\000\255\255\255\255\069\000\069\000\069\000\
\069\000\069\000\069\000\069\000\069\000\069\000\069\000\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\069\000\069\000\
\069\000\069\000\069\000\069\000\069\000\069\000\069\000\069\000\
\069\000\069\000\069\000\069\000\069\000\069\000\069\000\069\000\
\069\000\069\000\069\000\069\000\069\000\069\000\069\000\069\000\
\255\255\255\255\255\255\255\255\255\255\255\255\069\000\069\000\
\069\000\069\000\069\000\069\000\069\000\069\000\069\000\069\000\
\069\000\069\000\069\000\069\000\069\000\069\000\069\000\069\000\
\069\000\069\000\069\000\069\000\069\000\069\000\069\000\069\000\
\070\000\255\255\255\255\070\000\070\000\070\000\070\000\070\000\
\070\000\070\000\070\000\070\000\070\000\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\070\000\070\000\070\000\070\000\
\070\000\070\000\070\000\070\000\070\000\070\000\070\000\070\000\
\070\000\070\000\070\000\070\000\070\000\070\000\070\000\070\000\
\070\000\070\000\070\000\070\000\070\000\070\000\255\255\255\255\
\255\255\255\255\255\255\255\255\070\000\070\000\070\000\070\000\
\070\000\070\000\070\000\070\000\070\000\070\000\070\000\070\000\
\070\000\070\000\070\000\070\000\070\000\070\000\070\000\070\000\
\070\000\070\000\070\000\070\000\070\000\070\000\072\000\072\000\
\255\255\255\255\072\000\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\072\000\255\255\072\000\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\072\000\255\255\255\255\072\000\072\000\072\000\
\072\000\072\000\072\000\072\000\072\000\072\000\072\000\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\072\000\072\000\
\072\000\072\000\072\000\072\000\072\000\072\000\072\000\072\000\
\072\000\072\000\072\000\072\000\072\000\072\000\072\000\072\000\
\072\000\072\000\072\000\072\000\072\000\072\000\072\000\072\000\
\255\255\255\255\255\255\255\255\255\255\255\255\072\000\072\000\
\072\000\072\000\072\000\072\000\072\000\072\000\072\000\072\000\
\072\000\072\000\072\000\072\000\072\000\072\000\072\000\072\000\
\072\000\072\000\072\000\072\000\072\000\072\000\072\000\072\000\
\073\000\255\255\255\255\073\000\073\000\073\000\073\000\073\000\
\073\000\073\000\073\000\073\000\073\000\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\073\000\073\000\073\000\073\000\
\073\000\073\000\073\000\073\000\073\000\073\000\073\000\073\000\
\073\000\073\000\073\000\073\000\073\000\073\000\073\000\073\000\
\073\000\073\000\073\000\073\000\073\000\073\000\255\255\255\255\
\255\255\255\255\255\255\255\255\073\000\073\000\073\000\073\000\
\073\000\073\000\073\000\073\000\073\000\073\000\073\000\073\000\
\073\000\073\000\073\000\073\000\073\000\073\000\073\000\073\000\
\073\000\073\000\073\000\073\000\073\000\073\000\075\000\075\000\
\255\255\255\255\075\000\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\075\000\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\075\000\255\255\075\000\075\000\075\000\075\000\
\075\000\075\000\075\000\075\000\075\000\075\000\075\000\255\255\
\255\255\255\255\255\255\075\000\255\255\255\255\075\000\075\000\
\075\000\075\000\075\000\075\000\075\000\075\000\075\000\075\000\
\075\000\075\000\075\000\075\000\075\000\075\000\075\000\075\000\
\075\000\075\000\075\000\075\000\075\000\075\000\075\000\075\000\
\255\255\255\255\255\255\255\255\255\255\255\255\075\000\075\000\
\075\000\075\000\075\000\075\000\075\000\075\000\075\000\075\000\
\075\000\075\000\075\000\075\000\075\000\075\000\075\000\075\000\
\075\000\075\000\075\000\075\000\075\000\075\000\075\000\075\000\
\078\000\078\000\255\255\255\255\078\000\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\078\000\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\078\000\255\255\255\255\078\000\
\078\000\078\000\078\000\078\000\078\000\078\000\078\000\078\000\
\078\000\255\255\255\255\255\255\078\000\255\255\255\255\255\255\
\078\000\078\000\078\000\078\000\078\000\078\000\078\000\078\000\
\078\000\078\000\078\000\078\000\078\000\078\000\078\000\078\000\
\078\000\078\000\078\000\078\000\078\000\078\000\078\000\078\000\
\078\000\078\000\255\255\255\255\255\255\255\255\255\255\255\255\
\078\000\078\000\078\000\078\000\078\000\078\000\078\000\078\000\
\078\000\078\000\078\000\078\000\078\000\078\000\078\000\078\000\
\078\000\078\000\078\000\078\000\078\000\078\000\078\000\078\000\
\078\000\078\000\079\000\079\000\255\255\255\255\079\000\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\079\000\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\079\000\255\255\
\255\255\079\000\079\000\079\000\079\000\079\000\079\000\079\000\
\079\000\079\000\079\000\255\255\255\255\255\255\079\000\255\255\
\255\255\255\255\079\000\079\000\079\000\079\000\079\000\079\000\
\079\000\079\000\079\000\079\000\079\000\079\000\079\000\079\000\
\079\000\079\000\079\000\079\000\079\000\079\000\079\000\079\000\
\079\000\079\000\079\000\079\000\255\255\255\255\255\255\255\255\
\255\255\255\255\079\000\079\000\079\000\079\000\079\000\079\000\
\079\000\079\000\079\000\079\000\079\000\079\000\079\000\079\000\
\079\000\079\000\079\000\079\000\079\000\079\000\079\000\079\000\
\079\000\079\000\079\000\079\000\083\000\083\000\255\255\255\255\
\083\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\083\000\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\083\000\255\255\255\255\083\000\083\000\083\000\083\000\083\000\
\083\000\083\000\083\000\083\000\083\000\255\255\255\255\255\255\
\083\000\255\255\255\255\255\255\083\000\083\000\083\000\083\000\
\083\000\083\000\083\000\083\000\083\000\083\000\083\000\083\000\
\083\000\083\000\083\000\083\000\083\000\083\000\083\000\083\000\
\083\000\083\000\083\000\083\000\083\000\083\000\255\255\255\255\
\255\255\255\255\255\255\255\255\083\000\083\000\083\000\083\000\
\083\000\083\000\083\000\083\000\083\000\083\000\083\000\083\000\
\083\000\083\000\083\000\083\000\083\000\083\000\083\000\083\000\
\083\000\083\000\083\000\083\000\083\000\083\000\084\000\084\000\
\255\255\255\255\084\000\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\084\000\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\084\000\255\255\255\255\084\000\084\000\084\000\
\084\000\084\000\084\000\084\000\084\000\084\000\084\000\255\255\
\255\255\255\255\084\000\255\255\255\255\255\255\084\000\084\000\
\084\000\084\000\084\000\084\000\084\000\084\000\084\000\084\000\
\084\000\084\000\084\000\084\000\084\000\084\000\084\000\084\000\
\084\000\084\000\084\000\084\000\084\000\084\000\084\000\084\000\
\255\255\255\255\255\255\255\255\255\255\255\255\084\000\084\000\
\084\000\084\000\084\000\084\000\084\000\084\000\084\000\084\000\
\084\000\084\000\084\000\084\000\084\000\084\000\084\000\084\000\
\084\000\084\000\084\000\084\000\084\000\084\000\084\000\084\000\
\085\000\085\000\255\255\255\255\085\000\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\085\000\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\085\000\255\255\255\255\085\000\
\085\000\085\000\085\000\085\000\085\000\085\000\085\000\085\000\
\085\000\255\255\255\255\255\255\085\000\255\255\255\255\255\255\
\085\000\085\000\085\000\085\000\085\000\085\000\085\000\085\000\
\085\000\085\000\085\000\085\000\085\000\085\000\085\000\085\000\
\085\000\085\000\085\000\085\000\085\000\085\000\085\000\085\000\
\085\000\085\000\255\255\255\255\255\255\255\255\255\255\255\255\
\085\000\085\000\085\000\085\000\085\000\085\000\085\000\085\000\
\085\000\085\000\085\000\085\000\085\000\085\000\085\000\085\000\
\085\000\085\000\085\000\085\000\085\000\085\000\085\000\085\000\
\085\000\085\000\086\000\086\000\255\255\255\255\086\000\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\086\000\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\086\000\255\255\
\255\255\086\000\086\000\086\000\086\000\086\000\086\000\086\000\
\086\000\086\000\086\000\255\255\255\255\255\255\086\000\255\255\
\255\255\255\255\086\000\086\000\086\000\086\000\086\000\086\000\
\086\000\086\000\086\000\086\000\086\000\086\000\086\000\086\000\
\086\000\086\000\086\000\086\000\086\000\086\000\086\000\086\000\
\086\000\086\000\086\000\086\000\255\255\255\255\255\255\255\255\
\255\255\255\255\086\000\086\000\086\000\086\000\086\000\086\000\
\086\000\086\000\086\000\086\000\086\000\086\000\086\000\086\000\
\086\000\086\000\086\000\086\000\086\000\086\000\086\000\086\000\
\086\000\086\000\086\000\086\000\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255";
Lexing.lex_base_code =
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\001\000\002\000\009\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\005\000\008\000\000\000\038\000\010\000\000\000\
\013\000\049\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000";
Lexing.lex_backtrk_code =
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000";
Lexing.lex_default_code =
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\006\000\006\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\020\000\025\000\000\000\000\000\041\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000";
Lexing.lex_trans_code =
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\014\000\014\000\000\000\000\000\014\000\000\000\000\000\
\000\000\028\000\028\000\046\000\046\000\028\000\046\000\046\000\
\000\000\000\000\046\000\000\000\000\000\000\000\000\000\000\000\
\014\000\000\000\001\000\000\000\000\000\000\000\000\000\001\000\
\028\000\000\000\046\000\000\000\000\000\046\000\017\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\033\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000";
Lexing.lex_check_code =
"\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\040\000\040\000\255\255\255\255\040\000\042\000\042\000\
\255\255\043\000\043\000\046\000\046\000\043\000\048\000\048\000\
\255\255\255\255\048\000\255\255\255\255\255\255\255\255\255\255\
\040\000\255\255\029\000\032\000\255\255\042\000\255\255\029\000\
\043\000\033\000\046\000\255\255\255\255\048\000\040\000\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\043\000\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\042\000\255\255\255\255\043\000\255\255\046\000\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\032\000\033\000\255\255\255\255\042\000\255\255\255\255\
\043\000\255\255\046\000\255\255\255\255\255\255";
Lexing.lex_code =
"\255\003\255\002\255\255\003\255\255\001\002\000\003\255\005\255\
\255\004\255\255\007\255\006\255\255\003\005\255\003\005\005\255\
\255\004\255\003\005\255\000\003\255\006\255\007\255\255\007\255\
\255\000\004\001\006\002\007\255";
}
let rec main lexbuf =
__ocaml_lex_main_rec lexbuf 0
and __ocaml_lex_main_rec lexbuf __ocaml_lex_state =
match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with
| 0 ->
let lxm = Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos lexbuf.Lexing.lex_curr_pos in
# 173 "htmllex.mll"
(Blanks lxm)
# 1050 "htmllex.ml"
| 1 ->
# 175 "htmllex.mll"
(put (lexeme lexbuf) ;
in_comment lexbuf ;
Text (Buff.to_string buff))
# 1057 "htmllex.ml"
| 2 ->
# 179 "htmllex.mll"
(put (lexeme lexbuf) ;
in_tag lexbuf ;
Text (Buff.to_string buff))
# 1064 "htmllex.ml"
| 3 ->
let tag = Lexing.sub_lexeme lexbuf (lexbuf.Lexing.lex_start_pos + 1) lexbuf.Lexing.lex_curr_pos
and lxm = Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos lexbuf.Lexing.lex_curr_pos in
# 183 "htmllex.mll"
(put lxm ;
if is_textlevel tag then begin
let attrs = read_attrs lexbuf in
ouvre lexbuf tag attrs (Buff.to_string buff)
end else if is_basefont tag then begin
let attrs = read_attrs lexbuf in
set_basefont attrs lexbuf ;
Text (Buff.to_string buff)
end else begin
check_nesting lexbuf tag ;
in_tag lexbuf ;
let txt = Buff.to_string buff in
if is_br tag then
Blanks txt
else
Text txt
end)
# 1088 "htmllex.ml"
| 4 ->
let tag = Lexing.sub_lexeme lexbuf (lexbuf.Lexing.lex_start_pos + 2) lexbuf.Lexing.lex_curr_pos
and lxm = Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos lexbuf.Lexing.lex_curr_pos in
# 201 "htmllex.mll"
(put lxm ;
in_tag lexbuf ;
ferme lexbuf tag (Buff.to_string buff))
# 1098 "htmllex.ml"
| 5 ->
# 204 "htmllex.mll"
(Eof)
# 1103 "htmllex.ml"
| 6 ->
let c = Lexing.sub_lexeme_char lexbuf lexbuf.Lexing.lex_start_pos in
# 206 "htmllex.mll"
(putc c ;
text lexbuf ;
Text (Buff.to_string buff))
# 1112 "htmllex.ml"
| __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_main_rec lexbuf __ocaml_lex_state
and text lexbuf =
__ocaml_lex_text_rec lexbuf 20
and __ocaml_lex_text_rec lexbuf __ocaml_lex_state =
match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with
| 0 ->
let c = Lexing.sub_lexeme_char lexbuf lexbuf.Lexing.lex_start_pos in
# 212 "htmllex.mll"
(putc c ; text lexbuf)
# 1125 "htmllex.ml"
| 1 ->
# 213 "htmllex.mll"
(())
# 1130 "htmllex.ml"
| __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_text_rec lexbuf __ocaml_lex_state
and read_attrs lexbuf =
__ocaml_lex_read_attrs_rec lexbuf 22
and __ocaml_lex_read_attrs_rec lexbuf __ocaml_lex_state =
match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with
| 0 ->
let lxm = Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos lexbuf.Lexing.lex_curr_pos in
# 217 "htmllex.mll"
(aput lxm ; read_attrs lexbuf)
# 1143 "htmllex.ml"
| 1 ->
let name = Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos lexbuf.Lexing.lex_curr_pos in
# 219 "htmllex.mll"
(aput name ;
let v = read_avalue lexbuf in
let atxt = Buff.to_string abuff in
put atxt ;
(name,v,atxt)::read_attrs lexbuf)
# 1154 "htmllex.ml"
| 2 ->
# 224 "htmllex.mll"
(put_char buff '>' ; [])
# 1159 "htmllex.ml"
| 3 ->
# 225 "htmllex.mll"
(error "Attribute syntax" lexbuf)
# 1164 "htmllex.ml"
| __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_attrs_rec lexbuf __ocaml_lex_state
and read_avalue lexbuf =
__ocaml_lex_read_avalue_rec lexbuf 26
and __ocaml_lex_read_avalue_rec lexbuf __ocaml_lex_state =
match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with
| 0 ->
# 229 "htmllex.mll"
(let lxm = lexeme lexbuf in
aput lxm ;
Some (read_aavalue lexbuf))
# 1177 "htmllex.ml"
| 1 ->
# 232 "htmllex.mll"
(None)
# 1182 "htmllex.ml"
| __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_avalue_rec lexbuf __ocaml_lex_state
and read_aavalue lexbuf =
lexbuf.Lexing.lex_mem <- Array.create 4 (-1) ; __ocaml_lex_read_aavalue_rec lexbuf 29
and __ocaml_lex_read_aavalue_rec lexbuf __ocaml_lex_state =
match Lexing.new_engine __ocaml_lex_tables __ocaml_lex_state lexbuf with
| 0 ->
let x = Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_mem.(1) lexbuf.Lexing.lex_mem.(0)
and lxm = Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos lexbuf.Lexing.lex_curr_pos in
# 237 "htmllex.mll"
(aput lxm ;
x)
# 1197 "htmllex.ml"
| 1 ->
let lxm = Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos lexbuf.Lexing.lex_curr_pos in
# 240 "htmllex.mll"
(aput lxm ;
lxm)
# 1205 "htmllex.ml"
| 2 ->
# 242 "htmllex.mll"
(error "Attribute syntax" lexbuf)
# 1210 "htmllex.ml"
| __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_read_aavalue_rec lexbuf __ocaml_lex_state
and in_tag lexbuf =
__ocaml_lex_in_tag_rec lexbuf 35
and __ocaml_lex_in_tag_rec lexbuf __ocaml_lex_state =
match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with
| 0 ->
# 245 "htmllex.mll"
(putc '>')
# 1221 "htmllex.ml"
| 1 ->
let c = Lexing.sub_lexeme_char lexbuf lexbuf.Lexing.lex_start_pos in
# 246 "htmllex.mll"
(putc c ; in_tag lexbuf)
# 1228 "htmllex.ml"
| 2 ->
# 247 "htmllex.mll"
(error "End of file in tag" lexbuf)
# 1233 "htmllex.ml"
| __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_in_tag_rec lexbuf __ocaml_lex_state
and in_comment lexbuf =
__ocaml_lex_in_comment_rec lexbuf 36
and __ocaml_lex_in_comment_rec lexbuf __ocaml_lex_state =
match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with
| 0 ->
# 251 "htmllex.mll"
(put (lexeme lexbuf))
# 1244 "htmllex.ml"
| 1 ->
let c = Lexing.sub_lexeme_char lexbuf lexbuf.Lexing.lex_start_pos in
# 253 "htmllex.mll"
(putc c ; in_comment lexbuf)
# 1251 "htmllex.ml"
| 2 ->
# 255 "htmllex.mll"
(error "End of file in comment" lexbuf)
# 1256 "htmllex.ml"
| __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_in_comment_rec lexbuf __ocaml_lex_state
and styles lexbuf =
lexbuf.Lexing.lex_mem <- Array.create 8 (-1) ; (* L=1 [3] <- p ; *)
lexbuf.Lexing.lex_mem.(3) <- lexbuf.Lexing.lex_curr_pos ;
__ocaml_lex_styles_rec lexbuf 40
and __ocaml_lex_styles_rec lexbuf __ocaml_lex_state =
match Lexing.new_engine __ocaml_lex_tables __ocaml_lex_state lexbuf with
| 0 ->
# 258 "htmllex.mll"
( styles lexbuf )
# 1269 "htmllex.ml"
| 1 ->
# 259 "htmllex.mll"
( [] )
# 1274 "htmllex.ml"
| 2 ->
let name = Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_mem.(0) lexbuf.Lexing.lex_mem.(1)
and cl = Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_mem.(2) lexbuf.Lexing.lex_curr_pos in
# 262 "htmllex.mll"
( Css.Class (name, cl) :: styles lexbuf )
# 1282 "htmllex.ml"
| 3 ->
let lxm = Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_mem.(0) lexbuf.Lexing.lex_curr_pos in
# 264 "htmllex.mll"
(Css.Other lxm :: styles lexbuf)
# 1289 "htmllex.ml"
| __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_styles_rec lexbuf __ocaml_lex_state
and extract_classes cls lexbuf =
__ocaml_lex_extract_classes_rec cls lexbuf 50
and __ocaml_lex_extract_classes_rec cls lexbuf __ocaml_lex_state =
match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with
| 0 ->
# 269 "htmllex.mll"
( skip_comment lexbuf ; extract_classes cls lexbuf)
# 1300 "htmllex.ml"
| 1 ->
# 271 "htmllex.mll"
( skip_tag lexbuf ; extract_classes cls lexbuf )
# 1305 "htmllex.ml"
| 2 ->
# 273 "htmllex.mll"
( let cls = extract_attrs cls lexbuf in
extract_classes cls lexbuf )
# 1311 "htmllex.ml"
| 3 ->
# 275 "htmllex.mll"
( extract_classes cls lexbuf )
# 1316 "htmllex.ml"
| 4 ->
# 276 "htmllex.mll"
( cls )
# 1321 "htmllex.ml"
| __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_extract_classes_rec cls lexbuf __ocaml_lex_state
and skip_comment lexbuf =
__ocaml_lex_skip_comment_rec lexbuf 57
and __ocaml_lex_skip_comment_rec lexbuf __ocaml_lex_state =
match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with
| 0 ->
# 279 "htmllex.mll"
( () )
# 1332 "htmllex.ml"
| 1 ->
# 280 "htmllex.mll"
( skip_comment lexbuf )
# 1337 "htmllex.ml"
| 2 ->
# 281 "htmllex.mll"
( error "End of file in comment" lexbuf )
# 1342 "htmllex.ml"
| __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_skip_comment_rec lexbuf __ocaml_lex_state
and skip_tag lexbuf =
__ocaml_lex_skip_tag_rec lexbuf 60
and __ocaml_lex_skip_tag_rec lexbuf __ocaml_lex_state =
match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with
| 0 ->
# 284 "htmllex.mll"
( () )
# 1353 "htmllex.ml"
| 1 ->
# 285 "htmllex.mll"
( error "End of file in tag" lexbuf )
# 1358 "htmllex.ml"
| __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_skip_tag_rec lexbuf __ocaml_lex_state
and skip_value lexbuf =
__ocaml_lex_skip_value_rec lexbuf 62
and __ocaml_lex_skip_value_rec lexbuf __ocaml_lex_state =
match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with
| 0 ->
# 291 "htmllex.mll"
( () )
# 1369 "htmllex.ml"
| 1 ->
# 292 "htmllex.mll"
( error "Attribute syntax" lexbuf )
# 1374 "htmllex.ml"
| __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_skip_value_rec lexbuf __ocaml_lex_state
and extract_value cls lexbuf =
__ocaml_lex_extract_value_rec cls lexbuf 67
and __ocaml_lex_extract_value_rec cls lexbuf __ocaml_lex_state =
match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with
| 0 ->
let name = Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos lexbuf.Lexing.lex_curr_pos in
# 296 "htmllex.mll"
( Emisc.Strings.add name cls )
# 1387 "htmllex.ml"
| 1 ->
# 298 "htmllex.mll"
( extract_values_q cls lexbuf )
# 1392 "htmllex.ml"
| 2 ->
# 300 "htmllex.mll"
( extract_values_qq cls lexbuf )
# 1397 "htmllex.ml"
| 3 ->
# 301 "htmllex.mll"
( error "Attribute syntax" lexbuf )
# 1402 "htmllex.ml"
| __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_extract_value_rec cls lexbuf __ocaml_lex_state
and extract_values_q cls lexbuf =
__ocaml_lex_extract_values_q_rec cls lexbuf 69
and __ocaml_lex_extract_values_q_rec cls lexbuf __ocaml_lex_state =
match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with
| 0 ->
# 304 "htmllex.mll"
( extract_values_q cls lexbuf )
# 1413 "htmllex.ml"
| 1 ->
let cl = Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos lexbuf.Lexing.lex_curr_pos in
# 305 "htmllex.mll"
( extract_values_q (Emisc.Strings.add cl cls) lexbuf )
# 1420 "htmllex.ml"
| 2 ->
# 306 "htmllex.mll"
( cls )
# 1425 "htmllex.ml"
| 3 ->
# 307 "htmllex.mll"
( error "Class value syntax" lexbuf )
# 1430 "htmllex.ml"
| __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_extract_values_q_rec cls lexbuf __ocaml_lex_state
and extract_values_qq cls lexbuf =
__ocaml_lex_extract_values_qq_rec cls lexbuf 72
and __ocaml_lex_extract_values_qq_rec cls lexbuf __ocaml_lex_state =
match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with
| 0 ->
# 310 "htmllex.mll"
( extract_values_qq cls lexbuf )
# 1441 "htmllex.ml"
| 1 ->
let cl = Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos lexbuf.Lexing.lex_curr_pos in
# 311 "htmllex.mll"
( extract_values_qq (Emisc.Strings.add cl cls) lexbuf )
# 1448 "htmllex.ml"
| 2 ->
# 312 "htmllex.mll"
( cls )
# 1453 "htmllex.ml"
| 3 ->
# 313 "htmllex.mll"
( error "Class value syntax" lexbuf )
# 1458 "htmllex.ml"
| __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_extract_values_qq_rec cls lexbuf __ocaml_lex_state
and extract_attrs cls lexbuf =
__ocaml_lex_extract_attrs_rec cls lexbuf 75
and __ocaml_lex_extract_attrs_rec cls lexbuf __ocaml_lex_state =
match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with
| 0 ->
# 318 "htmllex.mll"
( extract_attrs cls lexbuf )
# 1469 "htmllex.ml"
| 1 ->
# 321 "htmllex.mll"
( let cls = extract_value cls lexbuf in
extract_attrs cls lexbuf )
# 1475 "htmllex.ml"
| 2 ->
# 325 "htmllex.mll"
( skip_value lexbuf ;
extract_attrs cls lexbuf )
# 1481 "htmllex.ml"
| 3 ->
# 328 "htmllex.mll"
( cls )
# 1486 "htmllex.ml"
| 4 ->
# 329 "htmllex.mll"
( error "Attribute syntax" lexbuf )
# 1491 "htmllex.ml"
| __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_extract_attrs_rec cls lexbuf __ocaml_lex_state
;;
# 332 "htmllex.mll"
let to_string = function
| Open (_,_,txt) | Close (_,txt) | Text txt | Blanks txt -> txt
| Eof -> "Eof"
let rec cost = function
| {tag=FONT ; attrs=attrs} -> (1,List.length attrs)
| _ -> (1,0)
let tok_buff = ref None
;;
let txt_buff = Buff.create ()
;;
let rec read_tokens blanks lb =
let t = main lb in
match t with
| Text txt -> Buff.put txt_buff txt ; read_tokens false lb
| Blanks txt -> Buff.put txt_buff txt ; read_tokens blanks lb
| _ ->
let txt = Buff.to_string txt_buff in
match txt with
| "" -> t
| _ ->
tok_buff := Some t ;
if blanks then
Blanks txt
else
Text txt
let reset () =
txt_level := 0 ;
Stack.reset txt_stack ;
Buff.reset txt_buff ;
Buff.reset buff ;
Buff.reset abuff
let next_token lb =
try match !tok_buff with
| Some t -> tok_buff := None ; t
| None -> read_tokens true lb
with
| e ->
reset () ;
raise e
let classes lexbuf =
extract_classes Emisc.Strings.empty lexbuf
# 1550 "htmllex.ml"