# 26 "editor/ed_ocaml_lexer.mll"
open Lexing
let prerr_endline _ = ()
type token =
AMPERAMPER
| AMPERSAND
| AND
| AS
| ASSERT
| BACKQUOTE
| BAR
| BARBAR
| BARRBRACKET
| BEGIN
| CHAR
| CLASS
| COLON
| COLONCOLON
| COLONEQUAL
| COLONGREATER
| COMMA
| CONSTRAINT
| DO
| DONE
| DOT
| DOTDOT
| DOWNTO
| ELSE
| END
| EOF
| EQUAL
| EXCEPTION
| EXTERNAL
| FALSE
| FLOAT
| FOR
| FUN
| FUNCTION
| FUNCTOR
| GREATER
| GREATERRBRACE
| GREATERRBRACKET
| IF
| IN
| INCLUDE
| INFIXOP0
| INFIXOP1
| INFIXOP2
| INFIXOP3
| INFIXOP4
| INHERIT
| INITIALIZER
| INT | INT32 | INT64 | NATIVEINT
| LABEL of string
| LAZY
| LBRACE
| LBRACELESS
| LBRACKET
| LBRACKETBAR
| LBRACKETGREATER
| LBRACKETLESS
| LESS
| LESSMINUS
| LET
| LIDENT
| LPAREN
| MATCH
| METHOD
| MINUS
| MINUSDOT
| MINUSGREATER
| MODULE
| MUTABLE
| NEW
| OBJECT
| OF
| OPEN
| OPTLABEL of string
| OR
| PARSER
| PLUS
| PREFIXOP
| PRIVATE
| QUESTION
| QUESTIONQUESTION
| QUOTE
| RBRACE
| RBRACKET
| REC
| RPAREN
| SEMI
| SEMISEMI
| SHARP
| SIG
| STAR
| STRING
| STRUCT
| SUBTRACTIVE
| THEN
| TO
| TRUE
| TRY
| TYPE
| UIDENT
| UNDERSCORE
| VAL
| VIRTUAL
| WHEN
| WHILE
| WITH
| COMMENT
| EOL
| EOFCOMMENT
| EOFSTRING
| ERROR
| RULE
| PARSE
type error =
| Illegal_character of char
| Illegal_escape of string
| Unterminated_comment
| Unterminated_string
| Keyword_as_label of string
| Literal_overflow of string
| End_with_no_begin of string
;;
type location = int * int
let curr_loc lexbuf =
(lexbuf.Lexing.lex_start_p.Lexing.pos_cnum,
lexbuf.Lexing.lex_curr_p.Lexing.pos_cnum)
exception Error of error * location
let token_kw =
[
"and", AND;
"as", AS;
"assert", ASSERT;
"begin", BEGIN;
"class", CLASS;
"constraint", CONSTRAINT;
"do", DO;
"done", DONE;
"downto", DOWNTO;
"else", ELSE;
"end", END;
"exception", EXCEPTION;
"external", EXTERNAL;
"false", FALSE;
"for", FOR;
"fun", FUN;
"function", FUNCTION;
"functor", FUNCTOR;
"if", IF;
"in", IN;
"include", INCLUDE;
"inherit", INHERIT;
"initializer", INITIALIZER;
"lazy", LAZY;
"let", LET;
"match", MATCH;
"method", METHOD;
"module", MODULE;
"mutable", MUTABLE;
"new", NEW;
"object", OBJECT;
"of", OF;
"open", OPEN;
"or", OR;
"private", PRIVATE;
"rec", REC;
"sig", SIG;
"struct", STRUCT;
"then", THEN;
"to", TO;
"true", TRUE;
"try", TRY;
"type", TYPE;
"val", VAL;
"virtual", VIRTUAL;
"when", WHEN;
"while", WHILE;
"with", WITH;
"mod", INFIXOP3 ;
"land", INFIXOP3 ;
"lor", INFIXOP3 ;
"lxor", INFIXOP3 ;
"lsl", INFIXOP4 ;
"lsr", INFIXOP4 ;
"asr", INFIXOP4 ;
]
let keyword_table = Hashtbl.create 149
let _ = List.iter
(fun (k,v) -> Hashtbl.add keyword_table k v)
token_kw
let char_for_backslash = function
| 'n' -> '\010'
| 'r' -> '\013'
| 'b' -> '\008'
| 't' -> '\009'
| c -> c
let char_for_decimal_code lexbuf i =
'x'
let char_for_hexadecimal_code lexbuf i =
'x'
let remove_underscores s =
let l = String.length s in
let rec remove src dst =
if src >= l then
if dst >= l then s else String.sub s 0 dst
else
match s.[src] with
'_' -> remove (src + 1) dst
| c -> s.[dst] <- c; remove (src + 1) (dst + 1)
in remove 0 0
let update_loc lexbuf file line absolute chars =
let pos = lexbuf.lex_curr_p in
let new_file = match file with
| None -> pos.pos_fname
| Some s -> s
in
lexbuf.lex_curr_p <- { pos with
pos_fname = new_file;
pos_lnum = if absolute then line else pos.pos_lnum + line;
pos_bol = pos.pos_cnum - chars;
}
;;
let report_error = function
| Illegal_character c ->
Printf.sprintf "Illegal character (%s)" (Char.escaped c)
| Illegal_escape s ->
Printf.sprintf "Illegal backslash escape in string or character (%s)" s
| Unterminated_comment ->
Printf.sprintf "Comment not terminated"
| Unterminated_string ->
Printf.sprintf "String literal not terminated"
| Keyword_as_label kwd ->
Printf.sprintf "`%s' is a keyword, it cannot be used as label name" kwd
| Literal_overflow ty ->
Printf.sprintf "Integer literal exceeds the range of representable integers of type %s" ty
| End_with_no_begin s ->
Printf.sprintf "The closing '%s' has no matching open equivalent" s
;;
let blocks = ref []
type cst_indent = {
ind_newline : int ;
ind_bracket : int ;
ind_brace : int ;
ind_parent : int ;
ind_let : int ;
ind_begin : int ;
ind_match : int ;
ind_comment : int ;
ind_if : int ;
ind_fun : int ;
ind_struct : int ;
ind_object : int ;
ind_class : int ;
ind_module : int ;
ind_type : int ;
ind_exception : int ;
ind_loop : int;
ind_field : int ;
ind_val : int;
}
let default_indent = {
ind_newline = 2 ;
ind_bracket = 2 ;
ind_brace = 2 ;
ind_parent = 1 ;
ind_let = 2 ;
ind_begin = 2 ;
ind_match = 2 ;
ind_comment = 3 ;
ind_if = 2 ;
ind_fun = 2 ;
ind_struct = 2 ;
ind_object = 2 ;
ind_class = 2 ;
ind_module = 2 ;
ind_type = 2 ;
ind_exception = 2 ;
ind_loop = 2;
ind_field = 2 ;
ind_val = 2;
}
let cst_indent = ref default_indent
let line_indentations = ref ([] : int option list)
let next_token_is_first = ref true
let next_line_is_more_indented = ref 0
let if_first_token_on_line n =
if !next_token_is_first then
(
line_indentations := (Some n) :: !line_indentations;
next_token_is_first := false
)
let if_first_token_on_line_set_none () =
if !next_token_is_first then
(
line_indentations := None :: !line_indentations;
next_token_is_first := false
)
let cur_indent = ref 0
let begin_comment_indentation = ref (!cur_indent, !next_line_is_more_indented)
let set_indent ?(touch_next_line=true) n =
cur_indent := n ;
if touch_next_line=true then
next_line_is_more_indented := 0
let inc_indent ?(touch_next_line=true) n =
cur_indent := !cur_indent + n;
if touch_next_line=true then
next_line_is_more_indented := 0
let dec_indent ?(touch_next_line=true) n =
cur_indent := !cur_indent - n;
if touch_next_line=true then
next_line_is_more_indented := 0
let string_of_token =
let l = List.map (fun (a,b) -> (b,a)) token_kw in
fun t ->
try List.assoc t l
with Not_found -> "<other>"
let prerr_blocks_stack () =
prerr_endline "Block stack is: ";
List.iter
(fun (tok,vext,vin) ->
prerr_endline (Printf.sprintf "%s (%d, %+d)" (string_of_token tok) vext vin))
!blocks
let last_popped = ref None
let rec pop tokens s lexbuf =
match !blocks with
[] ->
prerr_blocks_stack ();
raise (Error (End_with_no_begin s, curr_loc lexbuf))
| (tok, vext, vin) :: q ->
blocks := q;
last_popped := Some (tok,vext,vin);
if List.mem tok tokens then
(
prerr_endline (Printf.sprintf "popped %s (%d;%d)" (string_of_token tok) vext vin);
(vext, vin)
)
else
match tok with
MATCH | TRY | FUN | FUNCTION | FUNCTOR | MINUSGREATER | MODULE
| WITH | METHOD | VAL | ELSE | THEN | INCLUDE | LET
| EXCEPTION | TYPE | INITIALIZER ->
pop tokens s lexbuf
| _ ->
prerr_blocks_stack ();
raise (Error (End_with_no_begin s, curr_loc lexbuf))
let last_begin_let_indent () =
try
let (_,v,off) = List.find (fun (t,_,_) -> t=LET) !blocks in
Some (v, off)
with Not_found -> None
let last_and_associated_indent () =
try
let (t,vext,vin) =
List.find
(fun (t,_,_) -> t=LET or t=MODULE or t=CLASS or t=TYPE)
!blocks
in
Some (vext,vin)
with Not_found -> None
let last_begin_module_indent () =
try
let (_,v,off) = List.find (fun (t,_,_) -> t=MODULE) !blocks in
Some (v, off)
with Not_found -> None
let last_begin_struct_sig_indent () =
try
let (_,v,off) = List.find (fun (t,_,_) -> t=STRUCT or t=SIG) !blocks in
Some (v,off)
with Not_found -> None
let last_begin_object_indent () =
try
let (_,v,off) = List.find (fun (t,_,_) -> t=OBJECT) !blocks in
Some (v,off)
with Not_found -> None
let last_begin_sig_object_indent () =
try
let (_,v,off) = List.find (fun (t,_,_) -> t=OBJECT or t=SIG) !blocks in
Some (v,off)
with Not_found -> None
let push tok vext vin = blocks := (tok, vext, vin) :: !blocks
let push_if_different tok v off =
match !blocks with
(t,_,_) :: _ when t = tok -> false
| _ -> push tok v off; true
let begin_tokens_of_token = function
END -> [ BEGIN ; OBJECT ; SIG ; STRUCT ]
| IN -> [ LET ]
| DONE -> [ DO ]
| DO -> [ WHILE ; FOR ]
| RPAREN -> [LPAREN]
| RBRACE -> [LBRACE]
| RBRACKET -> [LBRACKET; LBRACKETLESS; LBRACKETGREATER]
| BARRBRACKET -> [LBRACKETBAR]
| GREATERRBRACE -> [LBRACELESS]
| GREATERRBRACKET -> [LBRACKETLESS]
| WITH -> [MATCH;TRY;LBRACE]
| THEN -> [IF]
| ELSE -> [THEN]
| OBJECT -> [CLASS]
| STRUCT | SIG -> [MODULE]
| _ -> assert false
let last_block_indent () =
match !blocks with
(_,n,off) :: _ -> (n, off)
| _ -> (0, 0)
let last_block_inner_indent () =
let (n,off) = last_block_indent () in n + off
let nl_info_stack = Stack.create ()
let push_nl_info () =
Stack.push !next_line_is_more_indented nl_info_stack
let pop_nl_info () =
try next_line_is_more_indented := Stack.pop nl_info_stack
with Stack.Empty -> ()
let on_par_open token lexbuf =
let cst = match token with
LPAREN -> !cst_indent.ind_parent
| LBRACE -> !cst_indent.ind_brace
| LBRACKET
| LBRACKETLESS
| LBRACKETGREATER -> !cst_indent.ind_bracket
| _ -> !cst_indent.ind_parent
in
if_first_token_on_line !cur_indent;
push_nl_info ();
push token !cur_indent cst;
inc_indent cst
let on_par_close lexbuf token s =
set_indent ~touch_next_line: false
(fst (pop (begin_tokens_of_token token) s lexbuf));
if_first_token_on_line !cur_indent;
pop_nl_info ()
let rec on_keyword lexbuf = function
AND ->
(
match last_and_associated_indent () with
Some (n, off) ->
set_indent (n+off);
if_first_token_on_line n
| None -> if_first_token_on_line !cur_indent
)
| AS
| ASSERT -> if_first_token_on_line !cur_indent
| BAR ->
(
match !blocks with
(WITH,n,_) :: _ ->
if_first_token_on_line n;
| (LBRACKET,n,_) :: _ ->
if_first_token_on_line n;
| (FUNCTION,n,_) :: _ ->
if_first_token_on_line n;
| (ELSE,_,_) :: q
| (THEN,_,_) :: q ->
blocks := q;
on_keyword lexbuf BAR
| _ ->
if_first_token_on_line !cur_indent
)
| (BEGIN | STRUCT | SIG | OBJECT) as token ->
if token = BEGIN then push_nl_info ();
if_first_token_on_line !cur_indent;
let cst =
match token with
BEGIN -> !cst_indent.ind_begin
| STRUCT | SIG -> !cst_indent.ind_struct
| OBJECT -> !cst_indent.ind_object
| _ -> assert false
in
push token !cur_indent cst;
inc_indent cst
| (CLASS | MODULE | CONSTRAINT | INCLUDE) as token ->
(
let ind =
match token with
CLASS -> !cst_indent.ind_class
| _ -> !cst_indent.ind_module
in
match last_begin_struct_sig_indent () with
None ->
if_first_token_on_line 0;
push token 0 ind;
set_indent ind
| Some (n, off) ->
let n = n + off in
if_first_token_on_line n;
push token n ind;
set_indent (n + ind);
);
prerr_endline "CLASS";
prerr_blocks_stack()
| DO ->
(
set_indent (fst (pop (begin_tokens_of_token DO) "do" lexbuf)) ;
if_first_token_on_line !cur_indent;
push DO !cur_indent !cst_indent.ind_loop;
inc_indent !cst_indent.ind_loop
)
| DONE ->
set_indent (fst (pop (begin_tokens_of_token DONE) "done" lexbuf));
if_first_token_on_line !cur_indent
| DOWNTO ->
if_first_token_on_line !cur_indent
| THEN ->
set_indent (fst (pop (begin_tokens_of_token THEN) "then" lexbuf));
push THEN !cur_indent !cst_indent.ind_if;
if_first_token_on_line !cur_indent;
inc_indent !cst_indent.ind_if
| ELSE ->
set_indent (fst (pop (begin_tokens_of_token ELSE) "else" lexbuf));
push ELSE !cur_indent !cst_indent.ind_if;
if_first_token_on_line !cur_indent;
inc_indent !cst_indent.ind_if;
| END ->
(
prerr_blocks_stack();
let (t,n,off) =
ignore(pop (begin_tokens_of_token END) "end" lexbuf);
match !last_popped with
None -> assert false
| Some info -> info
in
if_first_token_on_line n;
match t with
OBJECT | SIG | STRUCT ->
set_indent (fst (last_block_indent ()))
| _ ->
set_indent ~touch_next_line: false n;
pop_nl_info ();
)
| (EXCEPTION | EXTERNAL) as token ->
(
match last_begin_struct_sig_indent () with
None ->
if_first_token_on_line 0;
set_indent !cst_indent.ind_exception
| Some (n, off) ->
let n = n + off in
if_first_token_on_line n;
push token n !cst_indent.ind_exception;
set_indent (n + !cst_indent.ind_exception);
)
| FALSE | TRUE ->
if_first_token_on_line !cur_indent
| FOR ->
if_first_token_on_line !cur_indent;
push FOR !cur_indent 0;
| FUN ->
if !next_token_is_first then
(
if_first_token_on_line !cur_indent;
push FUN !cur_indent !cst_indent.ind_fun;
inc_indent !cst_indent.ind_fun
)
else
(
match !blocks with
(LET, n, _) :: _
| (METHOD, n, _) :: _
| (VAL, n, _) :: _ ->
()
| _ ->
if push_if_different FUN !cur_indent !cst_indent.ind_fun then
inc_indent !cst_indent.ind_fun
)
| FUNCTION ->
if !next_token_is_first then
(
if_first_token_on_line !cur_indent;
push FUNCTION !cur_indent !cst_indent.ind_fun;
inc_indent !cst_indent.ind_fun
)
else
(
match !blocks with
(LET, n, _) :: _
| (METHOD, n, _) :: _
| (VAL, n, _) :: _ ->
push FUNCTION n (2 * !cst_indent.ind_fun);
set_indent (n + !cst_indent.ind_fun)
| _ ->
push FUNCTION !cur_indent (2 * !cst_indent.ind_fun);
inc_indent (2 * !cst_indent.ind_fun)
)
| FUNCTOR ->
if_first_token_on_line !cur_indent;
if push_if_different FUNCTOR !cur_indent !cst_indent.ind_fun then
inc_indent !cst_indent.ind_fun
| IF ->
let p = last_block_inner_indent () in
if_first_token_on_line p;
push IF p !cst_indent.ind_if;
set_indent (p + !cst_indent.ind_if)
| IN ->
set_indent (fst (pop (begin_tokens_of_token IN) "in" lexbuf));
if_first_token_on_line !cur_indent;
| (INHERIT | INITIALIZER | METHOD) as token ->
(
match last_begin_object_indent () with
None ->
if_first_token_on_line !cur_indent;
if token = METHOD or token = INITIALIZER then
push token !cur_indent !cst_indent.ind_field;
inc_indent !cst_indent.ind_field;
| Some (n,off) ->
if_first_token_on_line (n+off);
if token = METHOD or token = INITIALIZER then
push token (n + off) !cst_indent.ind_field;
set_indent (n + off + !cst_indent.ind_field);
)
| VIRTUAL ->
if_first_token_on_line !cur_indent
| VAL ->
if !next_token_is_first then
(
let loc = lexbuf.Lexing.lex_start_p in
let pos_on_line = loc.Lexing.pos_cnum - loc.Lexing.pos_bol in
let (top_align,off) =
match last_begin_sig_object_indent () with
None -> (0, 0)
| Some (n, off) -> (n, off)
in
let pos =
if top_align + off >= pos_on_line then
top_align + off
else
!cur_indent
in
if_first_token_on_line pos;
push VAL pos !cst_indent.ind_val;
set_indent (pos + !cst_indent.ind_val)
)
else
(
push VAL !cur_indent !cst_indent.ind_val;
inc_indent !cst_indent.ind_val
)
| LAZY ->
if_first_token_on_line !cur_indent
| LET ->
if !next_token_is_first then
(
let loc = lexbuf.Lexing.lex_start_p in
let pos_on_line = loc.Lexing.pos_cnum - loc.Lexing.pos_bol in
let (top_align, off) =
match last_begin_struct_sig_indent () with
None -> (0, 0)
| Some (n, off) -> (n, off)
in
let pos =
if top_align + off >= pos_on_line then
top_align + off
else
last_block_inner_indent ()
in
if_first_token_on_line pos;
push LET pos !cst_indent.ind_let;
set_indent (pos + !cst_indent.ind_let)
)
else
(
push LET !cur_indent !cst_indent.ind_let;
inc_indent !cst_indent.ind_let
)
| (MATCH | TRY) as token ->
if_first_token_on_line !cur_indent;
push token !cur_indent !cst_indent.ind_match;
inc_indent !cst_indent.ind_match
| MINUSGREATER ->
(
if_first_token_on_line !cur_indent;
try
match !blocks with
(FUN,_,_) :: _
| (FUNCTOR,_,_) :: _ ->
()
| (FUNCTION,n,_) :: _ ->
set_indent (n + 2 * !cst_indent.ind_fun)
| (WITH,n,_) :: _ ->
set_indent (n + 2 * !cst_indent.ind_match)
| _ ->
()
with
Not_found ->
inc_indent !cst_indent.ind_fun
)
| MUTABLE ->
if_first_token_on_line !cur_indent;
| NEW ->
if_first_token_on_line !cur_indent;
| OF | OPEN | OR | PRIVATE | REC | TO ->
if_first_token_on_line !cur_indent;
| TYPE ->
(
match !blocks with
(MODULE,_,_) :: _
| (CLASS,_,_) :: _ ->
prerr_endline "nothing to be done for type";
prerr_blocks_stack ()
| _ ->
match last_begin_struct_sig_indent () with
None ->
if_first_token_on_line 0;
set_indent !cst_indent.ind_type
| Some (n, off) ->
if_first_token_on_line (n + off);
push TYPE (n + off) !cst_indent.ind_type;
set_indent (n + off + !cst_indent.ind_type)
)
| WHEN ->
if_first_token_on_line !cur_indent;
| WHILE ->
if_first_token_on_line !cur_indent;
push WHILE !cur_indent !cst_indent.ind_loop;
inc_indent !cst_indent.ind_loop
| WITH ->
(
let (n,_) = pop (begin_tokens_of_token WITH) "with" lexbuf in
match !last_popped with
Some (LBRACE,n,off) ->
set_indent (n + off);
if_first_token_on_line !cur_indent;
push LBRACE n off
| Some (MATCH,n,off) | Some (TRY,n,off) ->
set_indent n;
if_first_token_on_line !cur_indent;
push WITH n (2 * !cst_indent.ind_match);
inc_indent !cst_indent.ind_match
| _ ->
if_first_token_on_line n
)
| INFIXOP0 | INFIXOP1 | INFIXOP2 | INFIXOP3 | INFIXOP4 ->
if_first_token_on_line !cur_indent
| SEMI ->
(
match !blocks with
(t,n,off) :: q ->
let indent =
match t with
WITH | FUNCTION -> n + off
| ELSE | THEN ->
blocks := q;
n
| _ -> n + off
in
set_indent indent;
if_first_token_on_line !cur_indent;
| _ ->
if_first_token_on_line !cur_indent;
)
| COMMA ->
(
match !blocks with
(t,n,off) :: q ->
let indent = n + off in
set_indent indent;
if_first_token_on_line !cur_indent;
| _ ->
if_first_token_on_line !cur_indent;
)
| _ ->
if_first_token_on_line !cur_indent
# 886 "editor/ed_ocaml_lexer.ml"
let __ocaml_lex_tables = {
Lexing.lex_base =
"\000\000\182\255\183\255\224\000\003\001\038\001\073\001\108\001\196\255\143\001\180\001\032\000\204\255\067\000\217\001\252\001\069\000\072\000\085\000\031\002\221\255\223\255\226\255\066\002\123\000\101\002\093\000\047\001\240\255\120\002\153\002\226\002\178\003\145\004\237\004\189\005\127\000\001\000\255\255\156\006\186\006\251\255\138\007\105\008\248\255\241\255\242\255\243\255\095\000\045\003\093\000\112\000\055\003\253\003\008\006\103\002\173\004\133\000\122\008\098\000\237\000\114\000\239\255\238\255\234\255\097\005\078\003\115\000\237\255\026\004\117\000\236\255\022\006\118\000\235\255\117\000\232\255\147\008\231\255\044\007\016\005\004\000\230\255\007\000\009\001\045\001\008\000\005\000\230\255\214\008\249\008\030\009\065\009\218\255\214\255\215\255\216\255\212\255\100\009\205\255\206\255\207\255\202\255\199\255\135\009\195\255\197\255\170\009\205\009\014\001\252\255\253\255\006\000\254\255\127\000\255\255\062\002\251\255\252\255\009\000\253\255\254\255\135\000\255\255\135\000\182\000\012\000\016\000\225\000\017\000\224\000\013\000\255\255";
Lexing.lex_backtrk =
"\255\255\255\255\255\255\071\000\068\000\067\000\062\000\065\000\255\255\057\000\054\000\052\000\255\255\047\000\046\000\044\000\042\000\038\000\036\000\063\000\255\255\255\255\255\255\027\000\026\000\033\000\031\000\030\000\255\255\010\000\010\000\009\000\008\000\005\000\003\000\002\000\001\000\000\000\255\255\066\000\255\255\255\255\255\255\006\000\255\255\255\255\255\255\255\255\255\255\011\000\255\255\255\255\255\255\010\000\010\000\010\000\011\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\021\000\021\000\021\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\022\000\255\255\070\000\255\255\255\255\255\255\025\000\255\255\255\255\255\255\255\255\255\255\025\000\255\255\028\000\069\000\064\000\035\000\255\255\255\255\255\255\255\255\255\255\045\000\255\255\255\255\255\255\255\255\255\255\055\000\255\255\255\255\065\000\061\000\255\255\255\255\255\255\001\000\255\255\003\000\255\255\255\255\255\255\255\255\002\000\255\255\255\255\004\000\255\255\002\000\255\255\255\255\001\000\255\255\255\255\255\255\255\255\255\255";
Lexing.lex_default =
"\001\000\000\000\000\000\255\255\255\255\255\255\255\255\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\000\000\000\000\000\000\255\255\255\255\255\255\255\255\059\000\000\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\000\000\255\255\255\255\000\000\000\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\064\000\255\255\255\255\255\255\000\000\000\000\000\000\255\255\255\255\255\255\000\000\255\255\255\255\000\000\255\255\255\255\000\000\255\255\000\000\255\255\000\000\083\000\255\255\255\255\000\000\083\000\084\000\083\000\086\000\255\255\000\000\255\255\255\255\255\255\255\255\000\000\000\000\000\000\000\000\000\000\255\255\000\000\000\000\000\000\000\000\000\000\255\255\000\000\000\000\255\255\255\255\110\000\000\000\000\000\255\255\000\000\255\255\000\000\117\000\000\000\000\000\255\255\000\000\000\000\255\255\000\000\255\255\255\255\126\000\129\000\255\255\129\000\255\255\255\255\000\000";
Lexing.lex_trans =
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\036\000\038\000\038\000\036\000\037\000\082\000\088\000\113\000\082\000\088\000\120\000\081\000\087\000\127\000\132\000\000\000\000\000\128\000\128\000\000\000\000\000\000\000\000\000\036\000\007\000\028\000\024\000\005\000\003\000\023\000\027\000\026\000\021\000\025\000\006\000\020\000\019\000\018\000\003\000\030\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\017\000\016\000\015\000\014\000\009\000\033\000\004\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\031\000\013\000\102\000\012\000\004\000\035\000\022\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\011\000\010\000\008\000\034\000\100\000\097\000\099\000\096\000\093\000\080\000\095\000\094\000\075\000\036\000\063\000\057\000\036\000\057\000\055\000\055\000\056\000\056\000\056\000\056\000\056\000\056\000\056\000\056\000\056\000\056\000\062\000\068\000\080\000\071\000\074\000\076\000\036\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\115\000\123\000\125\000\079\000\079\000\079\000\079\000\079\000\079\000\079\000\079\000\079\000\079\000\056\000\056\000\056\000\056\000\056\000\056\000\056\000\056\000\056\000\056\000\101\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\126\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\061\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\002\000\003\000\130\000\131\000\003\000\003\000\003\000\255\255\255\255\000\000\003\000\003\000\255\255\003\000\003\000\003\000\255\255\255\255\000\000\082\000\062\000\000\000\081\000\000\000\113\000\000\000\003\000\112\000\003\000\003\000\003\000\003\000\003\000\000\000\000\000\000\000\004\000\000\000\000\000\004\000\004\000\004\000\000\000\086\000\000\000\004\000\004\000\000\000\004\000\004\000\004\000\000\000\000\000\000\000\085\000\082\000\114\000\061\000\081\000\000\000\060\000\004\000\003\000\004\000\004\000\004\000\004\000\004\000\000\000\000\000\000\000\005\000\000\000\000\000\005\000\005\000\005\000\085\000\000\000\084\000\005\000\005\000\000\000\005\000\005\000\005\000\255\255\000\000\000\000\000\000\000\000\000\000\003\000\000\000\003\000\000\000\005\000\004\000\005\000\005\000\005\000\005\000\005\000\000\000\000\000\000\000\090\000\000\000\000\000\090\000\090\000\090\000\000\000\000\000\000\000\090\000\090\000\000\000\090\000\090\000\090\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\004\000\000\000\090\000\005\000\090\000\090\000\090\000\090\000\090\000\000\000\058\000\000\000\107\000\000\000\000\000\107\000\107\000\107\000\000\000\000\000\000\000\107\000\107\000\000\000\107\000\107\000\107\000\000\000\000\000\000\000\000\000\000\000\000\000\005\000\000\000\005\000\000\000\107\000\090\000\107\000\108\000\107\000\107\000\107\000\000\000\000\000\000\000\005\000\000\000\000\000\005\000\005\000\005\000\000\000\000\000\000\000\005\000\005\000\000\000\005\000\005\000\005\000\000\000\000\000\000\000\000\000\000\000\000\000\090\000\000\000\090\000\000\000\005\000\107\000\005\000\005\000\005\000\005\000\005\000\000\000\000\000\000\000\000\000\000\000\005\000\000\000\000\000\005\000\005\000\005\000\000\000\000\000\000\000\005\000\005\000\000\000\005\000\005\000\005\000\000\000\000\000\000\000\000\000\107\000\000\000\107\000\000\000\106\000\005\000\005\000\000\000\005\000\005\000\005\000\005\000\005\000\000\000\000\000\000\000\000\000\000\000\005\000\000\000\000\000\005\000\005\000\005\000\000\000\000\000\000\000\005\000\005\000\000\000\005\000\005\000\005\000\255\255\000\000\005\000\105\000\005\000\111\000\000\000\000\000\103\000\005\000\005\000\000\000\005\000\005\000\005\000\005\000\005\000\000\000\000\000\000\000\005\000\000\000\000\000\005\000\005\000\005\000\000\000\000\000\000\000\005\000\005\000\000\000\098\000\005\000\005\000\000\000\255\255\000\000\255\255\104\000\000\000\005\000\000\000\000\000\000\000\005\000\005\000\005\000\005\000\005\000\005\000\005\000\000\000\000\000\000\000\090\000\000\000\000\000\090\000\090\000\090\000\000\000\000\000\120\000\090\000\090\000\119\000\090\000\091\000\090\000\000\000\000\000\000\000\000\000\000\000\000\000\005\000\000\000\005\000\000\000\090\000\005\000\090\000\090\000\092\000\090\000\090\000\121\000\000\000\000\000\005\000\000\000\000\000\005\000\005\000\089\000\000\000\000\000\000\000\005\000\005\000\000\000\005\000\005\000\005\000\000\000\000\000\000\000\000\000\000\000\000\000\005\000\000\000\005\000\000\000\005\000\090\000\005\000\005\000\005\000\005\000\005\000\000\000\000\000\000\000\003\000\000\000\000\000\003\000\003\000\003\000\000\000\000\000\078\000\077\000\003\000\000\000\003\000\003\000\003\000\000\000\000\000\055\000\055\000\000\000\122\000\090\000\000\000\090\000\000\000\003\000\005\000\003\000\003\000\003\000\003\000\003\000\049\000\000\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\000\000\046\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\048\000\005\000\000\000\005\000\000\000\000\000\003\000\046\000\000\000\055\000\049\000\000\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\047\000\000\000\045\000\000\000\029\000\000\000\000\000\000\000\050\000\000\000\048\000\048\000\000\000\000\000\003\000\000\000\003\000\047\000\046\000\045\000\000\000\051\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\052\000\000\000\000\000\000\000\000\000\000\000\000\000\029\000\000\000\000\000\050\000\000\000\000\000\048\000\000\000\000\000\000\000\000\000\000\000\000\000\047\000\000\000\045\000\051\000\031\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\052\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\031\000\000\000\118\000\000\000\000\000\031\000\000\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\031\000\049\000\049\000\049\000\049\000\049\000\049\000\049\000\049\000\049\000\049\000\053\000\053\000\053\000\053\000\053\000\053\000\053\000\053\000\053\000\053\000\000\000\048\000\000\000\000\000\000\000\000\000\000\000\053\000\053\000\053\000\053\000\053\000\053\000\069\000\069\000\069\000\069\000\069\000\069\000\069\000\069\000\069\000\069\000\000\000\000\000\000\000\000\000\049\000\000\000\000\000\000\000\000\000\000\000\048\000\000\000\000\000\000\000\000\000\000\000\053\000\053\000\053\000\053\000\053\000\053\000\000\000\000\000\000\000\000\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\000\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\031\000\031\000\031\000\031\000\031\000\031\000\032\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\000\000\000\000\000\000\000\000\032\000\000\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\053\000\053\000\053\000\053\000\053\000\053\000\053\000\053\000\053\000\053\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\053\000\053\000\053\000\053\000\053\000\053\000\000\000\000\000\000\000\000\000\000\000\046\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\000\000\053\000\000\000\053\000\053\000\053\000\053\000\053\000\053\000\000\000\000\000\000\000\000\000\000\000\047\000\000\000\045\000\000\000\000\000\000\000\000\000\000\000\000\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\000\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\000\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\039\000\000\000\000\000\039\000\039\000\039\000\000\000\000\000\000\000\039\000\039\000\000\000\039\000\039\000\039\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\039\000\000\000\039\000\039\000\039\000\043\000\039\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\056\000\056\000\056\000\056\000\056\000\056\000\056\000\056\000\056\000\056\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\039\000\042\000\000\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\056\000\039\000\039\000\039\000\000\000\039\000\039\000\039\000\000\000\000\000\000\000\039\000\039\000\080\000\039\000\039\000\039\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\039\000\000\000\039\000\039\000\039\000\039\000\039\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\079\000\079\000\079\000\079\000\079\000\079\000\079\000\079\000\079\000\079\000\000\000\039\000\040\000\000\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\000\000\039\000\000\000\039\000\000\000\000\000\000\000\000\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\000\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\072\000\072\000\072\000\072\000\072\000\072\000\072\000\072\000\072\000\072\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\072\000\072\000\072\000\072\000\072\000\072\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\072\000\072\000\072\000\072\000\072\000\072\000\000\000\000\000\000\000\000\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\032\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\000\000\000\000\000\000\000\000\032\000\000\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\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\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\046\000\000\000\000\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\000\000\000\000\000\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\047\000\000\000\045\000\073\000\073\000\073\000\073\000\073\000\073\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\000\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\000\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\039\000\000\000\000\000\039\000\039\000\039\000\000\000\000\000\000\000\039\000\039\000\000\000\039\000\039\000\039\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\039\000\000\000\039\000\039\000\039\000\039\000\039\000\000\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\041\000\000\000\000\000\000\000\000\000\000\000\039\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\000\000\000\000\000\000\039\000\040\000\039\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\085\000\082\000\000\000\000\000\081\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\085\000\000\000\084\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\079\000\079\000\079\000\079\000\079\000\079\000\079\000\079\000\079\000\079\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\000\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\042\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\044\000\000\000\000\000\000\000\000\000\000\000\000\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\000\000\000\000\000\000\000\000\042\000\000\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\255\255\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\000\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\000\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\039\000\000\000\000\000\039\000\039\000\039\000\000\000\000\000\000\000\039\000\039\000\000\000\039\000\039\000\039\000\000\000\067\000\000\000\067\000\000\000\000\000\000\000\000\000\067\000\000\000\039\000\000\000\039\000\039\000\039\000\039\000\039\000\066\000\066\000\066\000\066\000\066\000\066\000\066\000\066\000\066\000\066\000\077\000\000\000\000\000\077\000\077\000\077\000\000\000\000\000\000\000\077\000\077\000\000\000\077\000\077\000\077\000\000\000\000\000\000\000\000\000\039\000\000\000\000\000\000\000\000\000\000\000\077\000\000\000\077\000\077\000\077\000\077\000\077\000\000\000\000\000\067\000\000\000\000\000\000\000\000\000\000\000\067\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\039\000\000\000\039\000\067\000\000\000\000\000\000\000\067\000\000\000\067\000\000\000\000\000\077\000\065\000\000\000\000\000\000\000\000\000\005\000\000\000\000\000\005\000\005\000\005\000\000\000\000\000\000\000\005\000\005\000\000\000\005\000\005\000\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\077\000\005\000\077\000\005\000\005\000\005\000\005\000\005\000\000\000\000\000\000\000\090\000\000\000\000\000\090\000\090\000\090\000\000\000\000\000\000\000\090\000\090\000\000\000\090\000\090\000\090\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\090\000\005\000\090\000\090\000\090\000\090\000\090\000\000\000\000\000\000\000\000\000\000\000\090\000\000\000\000\000\090\000\090\000\090\000\000\000\000\000\000\000\090\000\090\000\000\000\090\000\090\000\090\000\000\000\000\000\000\000\000\000\005\000\000\000\005\000\000\000\000\000\090\000\090\000\000\000\090\000\090\000\090\000\090\000\090\000\000\000\000\000\000\000\090\000\000\000\000\000\090\000\090\000\090\000\000\000\000\000\000\000\090\000\090\000\000\000\090\000\090\000\090\000\000\000\000\000\000\000\000\000\090\000\000\000\090\000\000\000\000\000\255\255\090\000\090\000\090\000\090\000\090\000\090\000\090\000\000\000\000\000\000\000\005\000\000\000\000\000\005\000\005\000\005\000\000\000\000\000\000\000\005\000\005\000\000\000\005\000\005\000\005\000\000\000\000\000\000\000\000\000\000\000\000\000\090\000\000\000\090\000\000\000\005\000\090\000\005\000\005\000\005\000\005\000\005\000\000\000\000\000\000\000\005\000\000\000\000\000\005\000\005\000\005\000\000\000\000\000\000\000\005\000\005\000\000\000\005\000\005\000\005\000\000\000\000\000\000\000\000\000\000\000\000\000\090\000\000\000\090\000\000\000\005\000\005\000\005\000\005\000\005\000\005\000\005\000\000\000\000\000\000\000\107\000\000\000\000\000\107\000\107\000\107\000\000\000\000\000\000\000\107\000\107\000\000\000\107\000\107\000\107\000\000\000\000\000\000\000\000\000\000\000\000\000\005\000\000\000\005\000\000\000\107\000\005\000\107\000\107\000\107\000\107\000\107\000\000\000\000\000\000\000\107\000\000\000\000\000\107\000\107\000\107\000\000\000\000\000\000\000\107\000\107\000\000\000\107\000\107\000\107\000\000\000\000\000\000\000\000\000\000\000\000\000\005\000\000\000\005\000\000\000\107\000\107\000\107\000\107\000\107\000\107\000\107\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\107\000\000\000\107\000\000\000\000\000\107\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\107\000\000\000\107\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\037\000\000\000\000\000\081\000\087\000\112\000\083\000\086\000\119\000\083\000\086\000\126\000\131\000\255\255\255\255\127\000\129\000\255\255\255\255\255\255\255\255\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\000\016\000\013\000\017\000\018\000\024\000\017\000\017\000\026\000\036\000\059\000\048\000\036\000\048\000\050\000\050\000\048\000\048\000\048\000\048\000\048\000\048\000\048\000\048\000\048\000\048\000\061\000\067\000\024\000\070\000\073\000\075\000\036\000\051\000\051\000\051\000\051\000\051\000\051\000\051\000\051\000\114\000\122\000\124\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\057\000\057\000\057\000\057\000\057\000\057\000\057\000\057\000\057\000\057\000\013\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\125\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\060\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\128\000\130\000\003\000\003\000\003\000\083\000\086\000\255\255\003\000\003\000\126\000\003\000\003\000\003\000\127\000\129\000\255\255\084\000\060\000\255\255\084\000\255\255\109\000\255\255\003\000\109\000\003\000\003\000\003\000\003\000\003\000\255\255\255\255\255\255\004\000\255\255\255\255\004\000\004\000\004\000\255\255\084\000\255\255\004\000\004\000\255\255\004\000\004\000\004\000\255\255\255\255\255\255\085\000\085\000\109\000\027\000\085\000\255\255\027\000\004\000\003\000\004\000\004\000\004\000\004\000\004\000\255\255\255\255\255\255\005\000\255\255\255\255\005\000\005\000\005\000\085\000\255\255\085\000\005\000\005\000\255\255\005\000\005\000\005\000\027\000\255\255\255\255\255\255\255\255\255\255\003\000\255\255\003\000\255\255\005\000\004\000\005\000\005\000\005\000\005\000\005\000\255\255\255\255\255\255\006\000\255\255\255\255\006\000\006\000\006\000\255\255\255\255\255\255\006\000\006\000\255\255\006\000\006\000\006\000\255\255\255\255\255\255\255\255\255\255\255\255\004\000\255\255\004\000\255\255\006\000\005\000\006\000\006\000\006\000\006\000\006\000\255\255\027\000\255\255\007\000\255\255\255\255\007\000\007\000\007\000\255\255\255\255\255\255\007\000\007\000\255\255\007\000\007\000\007\000\255\255\255\255\255\255\255\255\255\255\255\255\005\000\255\255\005\000\255\255\007\000\006\000\007\000\007\000\007\000\007\000\007\000\255\255\255\255\255\255\009\000\255\255\255\255\009\000\009\000\009\000\255\255\255\255\255\255\009\000\009\000\255\255\009\000\009\000\009\000\255\255\255\255\255\255\255\255\255\255\255\255\006\000\255\255\006\000\255\255\009\000\007\000\009\000\009\000\009\000\009\000\009\000\255\255\255\255\255\255\255\255\255\255\010\000\255\255\255\255\010\000\010\000\010\000\255\255\255\255\255\255\010\000\010\000\255\255\010\000\010\000\010\000\255\255\255\255\255\255\255\255\007\000\255\255\007\000\255\255\009\000\009\000\010\000\255\255\010\000\010\000\010\000\010\000\010\000\255\255\255\255\255\255\255\255\255\255\014\000\255\255\255\255\014\000\014\000\014\000\255\255\255\255\255\255\014\000\014\000\255\255\014\000\014\000\014\000\084\000\255\255\009\000\009\000\009\000\109\000\255\255\255\255\010\000\010\000\014\000\255\255\014\000\014\000\014\000\014\000\014\000\255\255\255\255\255\255\015\000\255\255\255\255\015\000\015\000\015\000\255\255\255\255\255\255\015\000\015\000\255\255\015\000\015\000\015\000\255\255\085\000\255\255\027\000\010\000\255\255\010\000\255\255\255\255\255\255\015\000\014\000\015\000\015\000\015\000\015\000\015\000\255\255\255\255\255\255\019\000\255\255\255\255\019\000\019\000\019\000\255\255\255\255\116\000\019\000\019\000\116\000\019\000\019\000\019\000\255\255\255\255\255\255\255\255\255\255\255\255\014\000\255\255\014\000\255\255\019\000\015\000\019\000\019\000\019\000\019\000\019\000\116\000\255\255\255\255\023\000\255\255\255\255\023\000\023\000\023\000\255\255\255\255\255\255\023\000\023\000\255\255\023\000\023\000\023\000\255\255\255\255\255\255\255\255\255\255\255\255\015\000\255\255\015\000\255\255\023\000\019\000\023\000\023\000\023\000\023\000\023\000\255\255\255\255\255\255\025\000\255\255\255\255\025\000\025\000\025\000\255\255\255\255\025\000\025\000\025\000\255\255\025\000\025\000\025\000\255\255\255\255\055\000\055\000\255\255\116\000\019\000\255\255\019\000\255\255\025\000\023\000\025\000\025\000\025\000\025\000\025\000\029\000\255\255\029\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\255\255\055\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\029\000\023\000\255\255\023\000\255\255\255\255\025\000\029\000\255\255\055\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\055\000\255\255\055\000\255\255\029\000\255\255\255\255\255\255\030\000\255\255\029\000\030\000\255\255\255\255\025\000\255\255\025\000\029\000\030\000\029\000\255\255\030\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\030\000\255\255\255\255\255\255\255\255\255\255\255\255\030\000\255\255\255\255\030\000\255\255\255\255\030\000\255\255\255\255\255\255\255\255\255\255\255\255\030\000\255\255\030\000\030\000\031\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\030\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\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\116\000\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\049\000\049\000\049\000\049\000\049\000\049\000\049\000\049\000\049\000\049\000\052\000\052\000\052\000\052\000\052\000\052\000\052\000\052\000\052\000\052\000\255\255\049\000\255\255\255\255\255\255\255\255\255\255\052\000\052\000\052\000\052\000\052\000\052\000\066\000\066\000\066\000\066\000\066\000\066\000\066\000\066\000\066\000\066\000\255\255\255\255\255\255\255\255\049\000\255\255\255\255\255\255\255\255\255\255\049\000\255\255\255\255\255\255\255\255\255\255\052\000\052\000\052\000\052\000\052\000\052\000\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\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\031\000\031\000\031\000\031\000\031\000\032\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\255\255\255\255\255\255\255\255\032\000\255\255\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\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\255\255\255\255\255\255\255\255\255\255\053\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\255\255\255\255\053\000\255\255\053\000\053\000\053\000\053\000\053\000\053\000\255\255\255\255\255\255\255\255\255\255\053\000\255\255\053\000\255\255\255\255\255\255\255\255\255\255\255\255\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\255\255\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\255\255\032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\033\000\255\255\255\255\033\000\033\000\033\000\255\255\255\255\255\255\033\000\033\000\255\255\033\000\033\000\033\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\033\000\255\255\033\000\033\000\033\000\033\000\033\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\056\000\056\000\056\000\056\000\056\000\056\000\056\000\056\000\056\000\056\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\033\000\033\000\255\255\033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\056\000\033\000\034\000\033\000\255\255\034\000\034\000\034\000\255\255\255\255\255\255\034\000\034\000\080\000\034\000\034\000\034\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\034\000\255\255\034\000\034\000\034\000\034\000\034\000\255\255\255\255\080\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\080\000\080\000\080\000\080\000\080\000\080\000\080\000\080\000\080\000\080\000\255\255\034\000\034\000\255\255\034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\255\255\034\000\255\255\034\000\255\255\255\255\255\255\255\255\033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\255\255\033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\065\000\065\000\065\000\065\000\065\000\065\000\065\000\065\000\065\000\065\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\065\000\065\000\065\000\065\000\065\000\065\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\065\000\065\000\065\000\065\000\065\000\065\000\255\255\255\255\255\255\255\255\034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\035\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\255\255\255\255\255\255\255\255\035\000\255\255\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\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\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\054\000\255\255\255\255\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\255\255\255\255\255\255\054\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\054\000\255\255\054\000\072\000\072\000\072\000\072\000\072\000\072\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\255\255\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\255\255\035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\039\000\255\255\255\255\039\000\039\000\039\000\255\255\255\255\255\255\039\000\039\000\255\255\039\000\039\000\039\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\039\000\255\255\039\000\039\000\039\000\039\000\039\000\255\255\255\255\255\255\255\255\040\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\255\255\255\255\255\255\255\255\255\255\039\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\255\255\255\255\255\255\039\000\040\000\039\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\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\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\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\255\255\255\255\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\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\255\255\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\042\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\255\255\255\255\255\255\255\255\255\255\255\255\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\255\255\255\255\255\255\255\255\042\000\255\255\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\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\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\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\255\255\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\255\255\042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\043\000\255\255\255\255\043\000\043\000\043\000\255\255\255\255\255\255\043\000\043\000\255\255\043\000\043\000\043\000\255\255\058\000\255\255\058\000\255\255\255\255\255\255\255\255\058\000\255\255\043\000\255\255\043\000\043\000\043\000\043\000\043\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\077\000\255\255\255\255\077\000\077\000\077\000\255\255\255\255\255\255\077\000\077\000\255\255\077\000\077\000\077\000\255\255\255\255\255\255\255\255\043\000\255\255\255\255\255\255\255\255\255\255\077\000\255\255\077\000\077\000\077\000\077\000\077\000\255\255\255\255\058\000\255\255\255\255\255\255\255\255\255\255\058\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\043\000\255\255\043\000\058\000\255\255\255\255\255\255\058\000\255\255\058\000\255\255\255\255\077\000\058\000\255\255\255\255\255\255\255\255\089\000\255\255\255\255\089\000\089\000\089\000\255\255\255\255\255\255\089\000\089\000\255\255\089\000\089\000\089\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\077\000\089\000\077\000\089\000\089\000\089\000\089\000\089\000\255\255\255\255\255\255\090\000\255\255\255\255\090\000\090\000\090\000\255\255\255\255\255\255\090\000\090\000\255\255\090\000\090\000\090\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\090\000\089\000\090\000\090\000\090\000\090\000\090\000\255\255\255\255\255\255\255\255\255\255\091\000\255\255\255\255\091\000\091\000\091\000\255\255\255\255\255\255\091\000\091\000\255\255\091\000\091\000\091\000\255\255\255\255\255\255\255\255\089\000\255\255\089\000\255\255\255\255\090\000\091\000\255\255\091\000\091\000\091\000\091\000\091\000\255\255\255\255\255\255\092\000\255\255\255\255\092\000\092\000\092\000\255\255\255\255\255\255\092\000\092\000\255\255\092\000\092\000\092\000\255\255\255\255\255\255\255\255\090\000\255\255\090\000\255\255\255\255\058\000\092\000\091\000\092\000\092\000\092\000\092\000\092\000\255\255\255\255\255\255\098\000\255\255\255\255\098\000\098\000\098\000\255\255\255\255\255\255\098\000\098\000\255\255\098\000\098\000\098\000\255\255\255\255\255\255\255\255\255\255\255\255\091\000\255\255\091\000\255\255\098\000\092\000\098\000\098\000\098\000\098\000\098\000\255\255\255\255\255\255\104\000\255\255\255\255\104\000\104\000\104\000\255\255\255\255\255\255\104\000\104\000\255\255\104\000\104\000\104\000\255\255\255\255\255\255\255\255\255\255\255\255\092\000\255\255\092\000\255\255\104\000\098\000\104\000\104\000\104\000\104\000\104\000\255\255\255\255\255\255\107\000\255\255\255\255\107\000\107\000\107\000\255\255\255\255\255\255\107\000\107\000\255\255\107\000\107\000\107\000\255\255\255\255\255\255\255\255\255\255\255\255\098\000\255\255\098\000\255\255\107\000\104\000\107\000\107\000\107\000\107\000\107\000\255\255\255\255\255\255\108\000\255\255\255\255\108\000\108\000\108\000\255\255\255\255\255\255\108\000\108\000\255\255\108\000\108\000\108\000\255\255\255\255\255\255\255\255\255\255\255\255\104\000\255\255\104\000\255\255\108\000\107\000\108\000\108\000\108\000\108\000\108\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\107\000\255\255\107\000\255\255\255\255\108\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\108\000\255\255\108\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";
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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\036\000\000\000\012\000\000\000\000\000\002\000\000\000\000\000\027\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\012\000\000\000\000\000\000\000\000\000\000\000\027\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\019\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000\000\000\000\001\000\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\000\001\000\000\000\000\000\004\000\004\000\004\000\004\000\004\000\004\000\004\000\004\000\004\000\004\000\004\000\004\000\004\000\004\000\004\000\004\000\004\000\004\000\004\000\004\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\004\000\004\000\004\000\004\000\004\000\004\000\004\000\004\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\024\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\024\000\255\255\084\000\000\000\085\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\079\000\080\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\079\000\079\000\079\000\079\000\079\000\079\000\079\000\079\000\079\000\079\000\080\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\080\000\080\000\080\000\080\000\080\000\080\000\080\000\080\000\080\000\080\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\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\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\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\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_code =
"\255\004\255\255\005\255\255\007\255\006\255\255\003\255\000\004\001\005\255\007\255\255\006\255\007\255\255\000\004\001\005\003\006\002\007\255";
}
let rec token lexbuf =
lexbuf.Lexing.lex_mem <- Array.create 8 (-1) ; __ocaml_lex_token_rec lexbuf 0
and __ocaml_lex_token_rec lexbuf __ocaml_lex_state =
match Lexing.new_engine __ocaml_lex_tables __ocaml_lex_state lexbuf with
| 0 ->
# 935 "editor/ed_ocaml_lexer.mll"
( update_loc lexbuf None 1 false 0;
if (not !next_token_is_first) then
if !next_line_is_more_indented > 0 &&
(!cur_indent <= last_block_inner_indent ())
then
cur_indent := !cur_indent + !cst_indent.ind_newline
else
incr next_line_is_more_indented;
if_first_token_on_line 0;
next_token_is_first := true;
token lexbuf
)
# 1791 "editor/ed_ocaml_lexer.ml"
| 1 ->
# 949 "editor/ed_ocaml_lexer.mll"
( token lexbuf )
# 1796 "editor/ed_ocaml_lexer.ml"
| 2 ->
# 951 "editor/ed_ocaml_lexer.mll"
( if_first_token_on_line !cur_indent; token lexbuf )
# 1801 "editor/ed_ocaml_lexer.ml"
| 3 ->
# 952 "editor/ed_ocaml_lexer.mll"
( if_first_token_on_line !cur_indent; token lexbuf )
# 1806 "editor/ed_ocaml_lexer.ml"
| 4 ->
# 954 "editor/ed_ocaml_lexer.mll"
( if_first_token_on_line !cur_indent;
let s = Lexing.lexeme lexbuf in
let name = String.sub s 1 (String.length s - 2) in
if Hashtbl.mem keyword_table name then
raise (Error(Keyword_as_label name, curr_loc lexbuf));
token lexbuf )
# 1816 "editor/ed_ocaml_lexer.ml"
| 5 ->
# 960 "editor/ed_ocaml_lexer.mll"
( if_first_token_on_line !cur_indent; token lexbuf )
# 1821 "editor/ed_ocaml_lexer.ml"
| 6 ->
# 961 "editor/ed_ocaml_lexer.mll"
( if_first_token_on_line !cur_indent; token lexbuf )
# 1826 "editor/ed_ocaml_lexer.ml"
| 7 ->
# 963 "editor/ed_ocaml_lexer.mll"
(
let s = Lexing.lexeme lexbuf in
let name = String.sub s 1 (String.length s - 2) in
if Hashtbl.mem keyword_table name then
raise (Error(Keyword_as_label name, curr_loc lexbuf));
if_first_token_on_line !cur_indent;
token lexbuf )
# 1837 "editor/ed_ocaml_lexer.ml"
| 8 ->
# 971 "editor/ed_ocaml_lexer.mll"
(
let s = Lexing.lexeme lexbuf in
try
let kw = Hashtbl.find keyword_table s in
on_keyword lexbuf kw;
token lexbuf
with Not_found ->
if_first_token_on_line !cur_indent;
token lexbuf
)
# 1851 "editor/ed_ocaml_lexer.ml"
| 9 ->
# 982 "editor/ed_ocaml_lexer.mll"
(
if_first_token_on_line !cur_indent;
token lexbuf)
# 1858 "editor/ed_ocaml_lexer.ml"
| 10 ->
# 986 "editor/ed_ocaml_lexer.mll"
(
if_first_token_on_line !cur_indent;
token lexbuf
)
# 1866 "editor/ed_ocaml_lexer.ml"
| 11 ->
# 991 "editor/ed_ocaml_lexer.mll"
( if_first_token_on_line !cur_indent;
token lexbuf
)
# 1873 "editor/ed_ocaml_lexer.ml"
| 12 ->
# 995 "editor/ed_ocaml_lexer.mll"
(
if_first_token_on_line !cur_indent;
token lexbuf
)
# 1881 "editor/ed_ocaml_lexer.ml"
| 13 ->
# 1000 "editor/ed_ocaml_lexer.mll"
(
if_first_token_on_line !cur_indent;
token lexbuf
)
# 1889 "editor/ed_ocaml_lexer.ml"
| 14 ->
# 1005 "editor/ed_ocaml_lexer.mll"
(
if_first_token_on_line !cur_indent;
token lexbuf
)
# 1897 "editor/ed_ocaml_lexer.ml"
| 15 ->
# 1010 "editor/ed_ocaml_lexer.mll"
(
if_first_token_on_line !cur_indent;
string lexbuf;
token lexbuf
)
# 1906 "editor/ed_ocaml_lexer.ml"
| 16 ->
# 1016 "editor/ed_ocaml_lexer.mll"
(
if_first_token_on_line !cur_indent;
next_token_is_first := true;
if_first_token_on_line 0;
update_loc lexbuf None 1 false 1;
token lexbuf
)
# 1917 "editor/ed_ocaml_lexer.ml"
| 17 ->
# 1024 "editor/ed_ocaml_lexer.mll"
(
if_first_token_on_line !cur_indent;
token lexbuf
)
# 1925 "editor/ed_ocaml_lexer.ml"
| 18 ->
# 1029 "editor/ed_ocaml_lexer.mll"
(
if_first_token_on_line !cur_indent;
token lexbuf
)
# 1933 "editor/ed_ocaml_lexer.ml"
| 19 ->
# 1034 "editor/ed_ocaml_lexer.mll"
(
if_first_token_on_line !cur_indent;
token lexbuf
)
# 1941 "editor/ed_ocaml_lexer.ml"
| 20 ->
# 1039 "editor/ed_ocaml_lexer.mll"
(
if_first_token_on_line !cur_indent;
token lexbuf
)
# 1949 "editor/ed_ocaml_lexer.ml"
| 21 ->
# 1044 "editor/ed_ocaml_lexer.mll"
(
if_first_token_on_line !cur_indent;
let l = Lexing.lexeme lexbuf in
let esc = String.sub l 1 (String.length l - 1) in
raise (Error(Illegal_escape esc, curr_loc lexbuf))
)
# 1959 "editor/ed_ocaml_lexer.ml"
| 22 ->
# 1051 "editor/ed_ocaml_lexer.mll"
(
begin_comment_indentation := (!cur_indent, !next_line_is_more_indented);
if_first_token_on_line !cur_indent;
comment lexbuf;
token lexbuf )
# 1968 "editor/ed_ocaml_lexer.ml"
| 23 ->
# 1057 "editor/ed_ocaml_lexer.mll"
(
if_first_token_on_line !cur_indent;
comment lexbuf;
token lexbuf
)
# 1977 "editor/ed_ocaml_lexer.ml"
| 24 ->
# 1063 "editor/ed_ocaml_lexer.mll"
(
if_first_token_on_line !cur_indent;
let curpos = lexbuf.lex_curr_p in
lexbuf.lex_curr_p <- { curpos with pos_cnum = curpos.pos_cnum - 1 };
token lexbuf
)
# 1987 "editor/ed_ocaml_lexer.ml"
| 25 ->
let
# 1069 "editor/ed_ocaml_lexer.mll"
num
# 1993 "editor/ed_ocaml_lexer.ml"
= Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_mem.(0) lexbuf.Lexing.lex_mem.(1)
and
# 1070 "editor/ed_ocaml_lexer.mll"
name
# 1998 "editor/ed_ocaml_lexer.ml"
= Lexing.sub_lexeme_opt lexbuf lexbuf.Lexing.lex_mem.(3) lexbuf.Lexing.lex_mem.(2) in
# 1072 "editor/ed_ocaml_lexer.mll"
(
if_first_token_on_line 0;
update_loc lexbuf name (int_of_string num) true 0;
token lexbuf
)
# 2006 "editor/ed_ocaml_lexer.ml"
| 26 ->
# 1077 "editor/ed_ocaml_lexer.mll"
( if_first_token_on_line !cur_indent; token lexbuf )
# 2011 "editor/ed_ocaml_lexer.ml"
| 27 ->
# 1078 "editor/ed_ocaml_lexer.mll"
( if_first_token_on_line !cur_indent; token lexbuf )
# 2016 "editor/ed_ocaml_lexer.ml"
| 28 ->
# 1079 "editor/ed_ocaml_lexer.mll"
( if_first_token_on_line !cur_indent; token lexbuf )
# 2021 "editor/ed_ocaml_lexer.ml"
| 29 ->
# 1080 "editor/ed_ocaml_lexer.mll"
( if_first_token_on_line !cur_indent; token lexbuf )
# 2026 "editor/ed_ocaml_lexer.ml"
| 30 ->
# 1081 "editor/ed_ocaml_lexer.mll"
( if_first_token_on_line !cur_indent; token lexbuf )
# 2031 "editor/ed_ocaml_lexer.ml"
| 31 ->
# 1082 "editor/ed_ocaml_lexer.mll"
(
on_par_open LPAREN lexbuf;
token lexbuf
)
# 2039 "editor/ed_ocaml_lexer.ml"
| 32 ->
# 1086 "editor/ed_ocaml_lexer.mll"
(
on_par_close lexbuf RPAREN ")";
token lexbuf )
# 2046 "editor/ed_ocaml_lexer.ml"
| 33 ->
# 1089 "editor/ed_ocaml_lexer.mll"
( if_first_token_on_line !cur_indent;
token lexbuf )
# 2052 "editor/ed_ocaml_lexer.ml"
| 34 ->
# 1091 "editor/ed_ocaml_lexer.mll"
( on_keyword lexbuf COMMA;
token lexbuf )
# 2058 "editor/ed_ocaml_lexer.ml"
| 35 ->
# 1093 "editor/ed_ocaml_lexer.mll"
( if_first_token_on_line !cur_indent;
on_keyword lexbuf MINUSGREATER;
token lexbuf )
# 2065 "editor/ed_ocaml_lexer.ml"
| 36 ->
# 1096 "editor/ed_ocaml_lexer.mll"
( if_first_token_on_line !cur_indent;
token lexbuf )
# 2071 "editor/ed_ocaml_lexer.ml"
| 37 ->
# 1098 "editor/ed_ocaml_lexer.mll"
( if_first_token_on_line !cur_indent;
token lexbuf )
# 2077 "editor/ed_ocaml_lexer.ml"
| 38 ->
# 1100 "editor/ed_ocaml_lexer.mll"
( if_first_token_on_line !cur_indent;
token lexbuf )
# 2083 "editor/ed_ocaml_lexer.ml"
| 39 ->
# 1102 "editor/ed_ocaml_lexer.mll"
( if_first_token_on_line !cur_indent;
token lexbuf )
# 2089 "editor/ed_ocaml_lexer.ml"
| 40 ->
# 1104 "editor/ed_ocaml_lexer.mll"
( if_first_token_on_line !cur_indent;
token lexbuf )
# 2095 "editor/ed_ocaml_lexer.ml"
| 41 ->
# 1106 "editor/ed_ocaml_lexer.mll"
( if_first_token_on_line !cur_indent;
token lexbuf )
# 2101 "editor/ed_ocaml_lexer.ml"
| 42 ->
# 1108 "editor/ed_ocaml_lexer.mll"
( on_keyword lexbuf SEMI;
token lexbuf )
# 2107 "editor/ed_ocaml_lexer.ml"
| 43 ->
# 1110 "editor/ed_ocaml_lexer.mll"
(
set_indent 0;
if_first_token_on_line !cur_indent;
token lexbuf )
# 2115 "editor/ed_ocaml_lexer.ml"
| 44 ->
# 1114 "editor/ed_ocaml_lexer.mll"
( if_first_token_on_line !cur_indent;
token lexbuf )
# 2121 "editor/ed_ocaml_lexer.ml"
| 45 ->
# 1116 "editor/ed_ocaml_lexer.mll"
( if_first_token_on_line !cur_indent;
token lexbuf )
# 2127 "editor/ed_ocaml_lexer.ml"
| 46 ->
# 1118 "editor/ed_ocaml_lexer.mll"
( if_first_token_on_line !cur_indent;
token lexbuf )
# 2133 "editor/ed_ocaml_lexer.ml"
| 47 ->
# 1120 "editor/ed_ocaml_lexer.mll"
( on_par_open LBRACKET lexbuf;
token lexbuf )
# 2139 "editor/ed_ocaml_lexer.ml"
| 48 ->
# 1122 "editor/ed_ocaml_lexer.mll"
( on_par_open LBRACKETBAR lexbuf ;
token lexbuf )
# 2145 "editor/ed_ocaml_lexer.ml"
| 49 ->
# 1124 "editor/ed_ocaml_lexer.mll"
( on_par_open LBRACKETLESS lexbuf ;
token lexbuf )
# 2151 "editor/ed_ocaml_lexer.ml"
| 50 ->
# 1126 "editor/ed_ocaml_lexer.mll"
( on_par_open LBRACKETGREATER lexbuf;
token lexbuf )
# 2157 "editor/ed_ocaml_lexer.ml"
| 51 ->
# 1128 "editor/ed_ocaml_lexer.mll"
( on_par_close lexbuf RBRACKET "]";
token lexbuf )
# 2163 "editor/ed_ocaml_lexer.ml"
| 52 ->
# 1130 "editor/ed_ocaml_lexer.mll"
( on_par_open LBRACE lexbuf ;
token lexbuf )
# 2169 "editor/ed_ocaml_lexer.ml"
| 53 ->
# 1132 "editor/ed_ocaml_lexer.mll"
( on_par_open LBRACELESS lexbuf ;
token lexbuf )
# 2175 "editor/ed_ocaml_lexer.ml"
| 54 ->
# 1134 "editor/ed_ocaml_lexer.mll"
(
on_keyword lexbuf BAR;
token lexbuf )
# 2182 "editor/ed_ocaml_lexer.ml"
| 55 ->
# 1137 "editor/ed_ocaml_lexer.mll"
( if_first_token_on_line !cur_indent;
token lexbuf )
# 2188 "editor/ed_ocaml_lexer.ml"
| 56 ->
# 1139 "editor/ed_ocaml_lexer.mll"
( on_par_close lexbuf BARRBRACKET "|]";
token lexbuf )
# 2194 "editor/ed_ocaml_lexer.ml"
| 57 ->
# 1141 "editor/ed_ocaml_lexer.mll"
( token lexbuf )
# 2199 "editor/ed_ocaml_lexer.ml"
| 58 ->
# 1142 "editor/ed_ocaml_lexer.mll"
( on_par_close lexbuf GREATERRBRACKET ">]";
token lexbuf )
# 2205 "editor/ed_ocaml_lexer.ml"
| 59 ->
# 1144 "editor/ed_ocaml_lexer.mll"
( on_par_close lexbuf RBRACE "}";
token lexbuf )
# 2211 "editor/ed_ocaml_lexer.ml"
| 60 ->
# 1146 "editor/ed_ocaml_lexer.mll"
( on_par_close lexbuf GREATERRBRACE ">}";
token lexbuf )
# 2217 "editor/ed_ocaml_lexer.ml"
| 61 ->
# 1148 "editor/ed_ocaml_lexer.mll"
( if_first_token_on_line !cur_indent;
token lexbuf )
# 2223 "editor/ed_ocaml_lexer.ml"
| 62 ->
# 1150 "editor/ed_ocaml_lexer.mll"
( if_first_token_on_line !cur_indent;
token lexbuf )
# 2229 "editor/ed_ocaml_lexer.ml"
| 63 ->
# 1152 "editor/ed_ocaml_lexer.mll"
( if_first_token_on_line !cur_indent;
token lexbuf )
# 2235 "editor/ed_ocaml_lexer.ml"
| 64 ->
# 1154 "editor/ed_ocaml_lexer.mll"
( if_first_token_on_line !cur_indent;
token lexbuf )
# 2241 "editor/ed_ocaml_lexer.ml"
| 65 ->
# 1158 "editor/ed_ocaml_lexer.mll"
( if_first_token_on_line !cur_indent;
token lexbuf )
# 2247 "editor/ed_ocaml_lexer.ml"
| 66 ->
# 1161 "editor/ed_ocaml_lexer.mll"
( if_first_token_on_line !cur_indent;
token lexbuf )
# 2253 "editor/ed_ocaml_lexer.ml"
| 67 ->
# 1164 "editor/ed_ocaml_lexer.mll"
( if_first_token_on_line !cur_indent;
token lexbuf )
# 2259 "editor/ed_ocaml_lexer.ml"
| 68 ->
# 1167 "editor/ed_ocaml_lexer.mll"
( if_first_token_on_line !cur_indent;
token lexbuf )
# 2265 "editor/ed_ocaml_lexer.ml"
| 69 ->
# 1170 "editor/ed_ocaml_lexer.mll"
( if_first_token_on_line !cur_indent;
token lexbuf )
# 2271 "editor/ed_ocaml_lexer.ml"
| 70 ->
# 1173 "editor/ed_ocaml_lexer.mll"
( if_first_token_on_line !cur_indent;
token lexbuf )
# 2277 "editor/ed_ocaml_lexer.ml"
| 71 ->
# 1176 "editor/ed_ocaml_lexer.mll"
( if_first_token_on_line !cur_indent;
token lexbuf )
# 2283 "editor/ed_ocaml_lexer.ml"
| 72 ->
# 1178 "editor/ed_ocaml_lexer.mll"
( EOF )
# 2288 "editor/ed_ocaml_lexer.ml"
| 73 ->
# 1180 "editor/ed_ocaml_lexer.mll"
( raise (Error(Illegal_character (Lexing.lexeme_char lexbuf 0),
curr_loc lexbuf))
)
# 2295 "editor/ed_ocaml_lexer.ml"
| __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_token_rec lexbuf __ocaml_lex_state
and comment lexbuf =
__ocaml_lex_comment_rec lexbuf 109
and __ocaml_lex_comment_rec lexbuf __ocaml_lex_state =
match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with
| 0 ->
# 1186 "editor/ed_ocaml_lexer.mll"
(
if_first_token_on_line !cur_indent;
let indent, next_indented = !begin_comment_indentation in
cur_indent := indent;
next_line_is_more_indented := next_indented - 1
)
# 2312 "editor/ed_ocaml_lexer.ml"
| 1 ->
# 1194 "editor/ed_ocaml_lexer.mll"
(
if_first_token_on_line 0;
next_token_is_first := true;
update_loc lexbuf None 1 false 1;
comment lexbuf
)
# 2322 "editor/ed_ocaml_lexer.ml"
| 2 ->
# 1201 "editor/ed_ocaml_lexer.mll"
( raise (Error (Unterminated_comment, curr_loc lexbuf)) )
# 2327 "editor/ed_ocaml_lexer.ml"
| 3 ->
# 1203 "editor/ed_ocaml_lexer.mll"
(
if_first_token_on_line (!cur_indent + !cst_indent.ind_comment);
comment lexbuf )
# 2334 "editor/ed_ocaml_lexer.ml"
| __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_comment_rec lexbuf __ocaml_lex_state
and string lexbuf =
__ocaml_lex_string_rec lexbuf 116
and __ocaml_lex_string_rec lexbuf __ocaml_lex_state =
match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with
| 0 ->
# 1209 "editor/ed_ocaml_lexer.mll"
( if_first_token_on_line_set_none () ;
string lexbuf
)
# 2347 "editor/ed_ocaml_lexer.ml"
| 1 ->
# 1213 "editor/ed_ocaml_lexer.mll"
( if_first_token_on_line_set_none () )
# 2352 "editor/ed_ocaml_lexer.ml"
| 2 ->
# 1215 "editor/ed_ocaml_lexer.mll"
(
if_first_token_on_line_set_none () ;
next_token_is_first := true;
update_loc lexbuf None 1 false 1;
string lexbuf
)
# 2362 "editor/ed_ocaml_lexer.ml"
| 3 ->
# 1222 "editor/ed_ocaml_lexer.mll"
( raise (Error (Unterminated_string, curr_loc lexbuf)) )
# 2367 "editor/ed_ocaml_lexer.ml"
| 4 ->
# 1224 "editor/ed_ocaml_lexer.mll"
(
if_first_token_on_line_set_none ();
string lexbuf )
# 2374 "editor/ed_ocaml_lexer.ml"
| __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_string_rec lexbuf __ocaml_lex_state
and skip_sharp_bang lexbuf =
__ocaml_lex_skip_sharp_bang_rec lexbuf 124
and __ocaml_lex_skip_sharp_bang_rec lexbuf __ocaml_lex_state =
match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with
| 0 ->
# 1230 "editor/ed_ocaml_lexer.mll"
( update_loc lexbuf None 3 false 0 )
# 2385 "editor/ed_ocaml_lexer.ml"
| 1 ->
# 1232 "editor/ed_ocaml_lexer.mll"
( update_loc lexbuf None 1 false 0 )
# 2390 "editor/ed_ocaml_lexer.ml"
| 2 ->
# 1233 "editor/ed_ocaml_lexer.mll"
( () )
# 2395 "editor/ed_ocaml_lexer.ml"
| __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_skip_sharp_bang_rec lexbuf __ocaml_lex_state
;;
# 1235 "editor/ed_ocaml_lexer.mll"
let get_lines_indentation ?(indent_spec=default_indent) s =
let lexbuf = Lexing.from_string s in
blocks := [];
line_indentations := [];
next_token_is_first := true;
set_indent 0;
cst_indent := indent_spec;
try ignore(token lexbuf);
`Success (List.rev !line_indentations);
with Error (e,loc) -> `Failure (e,loc,(List.rev !line_indentations))
# 2415 "editor/ed_ocaml_lexer.ml"