diff --git a/.gitignore b/.gitignore index 6d386db..b0a833a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,12 +1,16 @@ -lexer.ml -parser.cmi -parser.ml +# Lib files +src/lexer.ml +src/parser.cmi +src/parser.ml # Compiled files *.cmo *.mli -*.cmi +src/**/*.cmi comp +# Tests out +tests/out/ + # MacOS file .DS_Store diff --git a/compile.sh b/compile.sh new file mode 100755 index 0000000..0f1f168 --- /dev/null +++ b/compile.sh @@ -0,0 +1,2 @@ +cd src +make \ No newline at end of file diff --git a/lib/lexer.ml b/lib/lexer.ml new file mode 100644 index 0000000..eb7a496 --- /dev/null +++ b/lib/lexer.ml @@ -0,0 +1,1493 @@ +# 1 "lexer.mll" + + open Lexing + open Parser + open Lang + exception Lexerror + + let pos lexbuf = (lexeme_start lexbuf, lexeme_end lexbuf) + + let advance_line_pos pos = + { pos with pos_lnum = pos.pos_lnum + 1; pos_bol = pos.pos_cnum; } + + let advance_line lexbuf = + lexbuf.lex_curr_p <- advance_line_pos lexbuf.lex_curr_p + + +# 18 "lexer.ml" +let __ocaml_lex_tables = { + Lexing.lex_base = + "\000\000\206\255\078\000\208\255\012\000\001\000\003\000\030\000\ + \031\000\160\000\235\000\054\001\129\001\204\001\023\002\098\002\ + \173\002\248\002\067\003\230\255\231\255\232\255\233\255\032\000\ + \235\255\236\255\237\255\238\255\243\255\048\000\049\000\050\000\ + \180\003\143\003\155\003\091\000\176\003\191\000\254\255\255\255\ + \253\255\192\000\239\255\254\003\223\002\173\003\252\255\224\002\ + \248\255\111\004\242\255\241\255\240\255\216\255\139\004\214\004\ + \047\005\122\005\197\005\016\006\091\006\166\006\241\006\060\007\ + \135\007\210\007\029\008\104\008\179\008\254\008\073\009\148\009\ + \223\009\042\010\117\010\192\010\011\011\086\011\161\011\236\011\ + \055\012\130\012\205\012\024\013\099\013\174\013\249\013\068\014\ + \143\014\218\014\037\015\112\015\187\015\006\016\081\016\215\255\ + \213\255\211\255\210\255\209\255\037\000\038\000\255\255"; + Lexing.lex_backtrk = + "\255\255\255\255\048\000\255\255\049\000\049\000\049\000\043\000\ + \041\000\048\000\048\000\048\000\048\000\048\000\048\000\048\000\ + \048\000\048\000\048\000\255\255\255\255\255\255\255\255\021\000\ + \255\255\255\255\255\255\255\255\255\255\010\000\009\000\008\000\ + \049\000\005\000\004\000\004\000\011\000\049\000\255\255\255\255\ + \255\255\255\255\255\255\006\000\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\048\000\048\000\ + \026\000\048\000\048\000\048\000\048\000\048\000\027\000\048\000\ + \048\000\033\000\037\000\034\000\048\000\028\000\048\000\029\000\ + \048\000\048\000\048\000\048\000\030\000\048\000\048\000\031\000\ + \048\000\048\000\032\000\048\000\048\000\035\000\048\000\048\000\ + \048\000\036\000\048\000\048\000\048\000\048\000\038\000\255\255\ + \255\255\255\255\255\255\255\255\001\000\001\000\255\255"; + Lexing.lex_default = + "\001\000\000\000\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\ + \255\255\255\255\255\255\000\000\000\000\000\000\000\000\255\255\ + \000\000\000\000\000\000\000\000\000\000\255\255\255\255\255\255\ + \049\000\255\255\255\255\255\255\255\255\041\000\000\000\000\000\ + \000\000\041\000\000\000\255\255\044\000\047\000\000\000\047\000\ + \000\000\049\000\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\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\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\ + \000\000\000\000\000\000\000\000\101\000\101\000\000\000"; + Lexing.lex_trans = + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\039\000\038\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \039\000\006\000\032\000\037\000\000\000\028\000\005\000\098\000\ + \027\000\026\000\029\000\031\000\022\000\030\000\033\000\036\000\ + \035\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\ + \034\000\034\000\020\000\021\000\007\000\023\000\008\000\019\000\ + \097\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\096\000\095\000\053\000\052\000\051\000\ + \050\000\002\000\018\000\002\000\002\000\011\000\017\000\002\000\ + \002\000\016\000\002\000\002\000\015\000\002\000\002\000\002\000\ + \002\000\002\000\009\000\014\000\012\000\002\000\013\000\010\000\ + \002\000\002\000\002\000\025\000\004\000\024\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \099\000\033\000\000\000\000\000\000\000\000\000\000\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\040\000\040\000\000\000\000\000\000\000\000\000\000\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\000\000\000\000\000\000\000\000\000\000\ + \003\000\002\000\002\000\002\000\002\000\090\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\102\000\255\255\000\000\ + \000\000\000\000\000\000\000\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\086\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\083\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\000\000\000\000\000\000\000\000\255\255\ + \255\255\000\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\080\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\077\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\072\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\070\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \000\000\045\000\045\000\000\000\000\000\000\000\002\000\002\000\ + \002\000\002\000\002\000\067\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\068\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\058\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\059\000\002\000\002\000\057\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\054\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\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\000\000\034\000\034\000\034\000\034\000\034\000\ + \034\000\034\000\034\000\034\000\034\000\000\000\048\000\045\000\ + \000\000\000\000\044\000\000\000\046\000\000\000\042\000\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\043\000\043\000\043\000\043\000\043\000\043\000\043\000\ + \043\000\043\000\043\000\043\000\043\000\043\000\043\000\043\000\ + \043\000\043\000\043\000\043\000\043\000\043\000\043\000\043\000\ + \043\000\043\000\043\000\000\000\000\000\000\000\000\000\000\000\ + \255\255\043\000\043\000\043\000\043\000\043\000\043\000\043\000\ + \043\000\043\000\043\000\043\000\043\000\043\000\043\000\043\000\ + \043\000\043\000\043\000\043\000\043\000\043\000\043\000\043\000\ + \043\000\043\000\043\000\043\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\043\000\ + \043\000\043\000\043\000\043\000\043\000\043\000\043\000\043\000\ + \043\000\043\000\043\000\043\000\043\000\043\000\043\000\043\000\ + \043\000\043\000\043\000\043\000\043\000\043\000\043\000\043\000\ + \043\000\000\000\000\000\000\000\000\000\000\000\000\000\043\000\ + \043\000\043\000\043\000\043\000\043\000\043\000\043\000\043\000\ + \043\000\043\000\043\000\043\000\043\000\043\000\043\000\043\000\ + \043\000\043\000\043\000\043\000\043\000\043\000\043\000\043\000\ + \043\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\048\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\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\255\255\000\000\000\000\000\000\ + \000\000\000\000\000\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\255\255\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\055\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\056\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\000\000\000\000\000\000\000\000\000\000\000\000\255\255\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\066\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\063\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\060\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\061\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\062\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\064\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \002\000\002\000\002\000\002\000\065\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\069\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\071\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\073\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\074\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\075\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\002\000\002\000\002\000\002\000\002\000\002\000\076\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\078\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\002\000\002\000\002\000\079\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\081\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\002\000\002\000\002\000\002\000\082\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\084\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\002\000\002\000\002\000\002\000\ + \085\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\087\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \088\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \002\000\002\000\002\000\002\000\089\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\091\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\092\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\093\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\094\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\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\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\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\000\000\000\000\000\000\255\255\000\000\000\000\005\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\007\000\008\000\023\000\029\000\030\000\ + \031\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \004\000\035\000\255\255\255\255\255\255\255\255\255\255\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\255\255\255\255\255\255\255\255\255\255\255\255\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ + \002\000\037\000\041\000\255\255\255\255\255\255\255\255\255\255\ + \009\000\009\000\009\000\009\000\009\000\009\000\009\000\009\000\ + \009\000\009\000\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\009\000\009\000\009\000\009\000\009\000\009\000\009\000\ + \009\000\009\000\009\000\009\000\009\000\009\000\009\000\009\000\ + \009\000\009\000\009\000\009\000\009\000\009\000\009\000\009\000\ + \009\000\009\000\009\000\255\255\255\255\255\255\255\255\255\255\ + \000\000\009\000\009\000\009\000\009\000\009\000\009\000\009\000\ + \009\000\009\000\009\000\009\000\009\000\009\000\009\000\009\000\ + \009\000\009\000\009\000\009\000\009\000\009\000\009\000\009\000\ + \009\000\009\000\009\000\010\000\010\000\010\000\010\000\010\000\ + \010\000\010\000\010\000\010\000\010\000\100\000\101\000\255\255\ + \255\255\255\255\255\255\255\255\010\000\010\000\010\000\010\000\ + \010\000\010\000\010\000\010\000\010\000\010\000\010\000\010\000\ + \010\000\010\000\010\000\010\000\010\000\010\000\010\000\010\000\ + \010\000\010\000\010\000\010\000\010\000\010\000\255\255\255\255\ + \255\255\255\255\255\255\255\255\010\000\010\000\010\000\010\000\ + \010\000\010\000\010\000\010\000\010\000\010\000\010\000\010\000\ + \010\000\010\000\010\000\010\000\010\000\010\000\010\000\010\000\ + \010\000\010\000\010\000\010\000\010\000\010\000\011\000\011\000\ + \011\000\011\000\011\000\011\000\011\000\011\000\011\000\011\000\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\011\000\ + \011\000\011\000\011\000\011\000\011\000\011\000\011\000\011\000\ + \011\000\011\000\011\000\011\000\011\000\011\000\011\000\011\000\ + \011\000\011\000\011\000\011\000\011\000\011\000\011\000\011\000\ + \011\000\255\255\255\255\255\255\255\255\255\255\255\255\011\000\ + \011\000\011\000\011\000\011\000\011\000\011\000\011\000\011\000\ + \011\000\011\000\011\000\011\000\011\000\011\000\011\000\011\000\ + \011\000\011\000\011\000\011\000\011\000\011\000\011\000\011\000\ + \011\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\ + \012\000\012\000\012\000\255\255\255\255\255\255\255\255\037\000\ + \041\000\255\255\012\000\012\000\012\000\012\000\012\000\012\000\ + \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\ + \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\ + \012\000\012\000\012\000\012\000\255\255\255\255\255\255\255\255\ + \255\255\255\255\012\000\012\000\012\000\012\000\012\000\012\000\ + \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\ + \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\ + \012\000\012\000\012\000\012\000\013\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\013\000\013\000\013\000\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\013\000\013\000\013\000\ + \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\013\000\013\000\013\000\013\000\255\255\ + \255\255\255\255\255\255\255\255\255\255\013\000\013\000\013\000\ + \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\013\000\013\000\013\000\013\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\255\255\255\255\255\255\255\255\ + \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\255\255\255\255\255\255\ + \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\015\000\015\000\015\000\015\000\015\000\015\000\ + \015\000\015\000\015\000\015\000\255\255\255\255\255\255\255\255\ + \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\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\255\255\255\255\255\255\ + \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\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\016\000\016\000\016\000\ + \016\000\016\000\016\000\016\000\016\000\016\000\016\000\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\016\000\016\000\ + \016\000\016\000\016\000\016\000\016\000\016\000\016\000\016\000\ + \016\000\016\000\016\000\016\000\016\000\016\000\016\000\016\000\ + \016\000\016\000\016\000\016\000\016\000\016\000\016\000\016\000\ + \255\255\044\000\047\000\255\255\255\255\255\255\016\000\016\000\ + \016\000\016\000\016\000\016\000\016\000\016\000\016\000\016\000\ + \016\000\016\000\016\000\016\000\016\000\016\000\016\000\016\000\ + \016\000\016\000\016\000\016\000\016\000\016\000\016\000\016\000\ + \017\000\017\000\017\000\017\000\017\000\017\000\017\000\017\000\ + \017\000\017\000\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\017\000\017\000\017\000\017\000\017\000\017\000\017\000\ + \017\000\017\000\017\000\017\000\017\000\017\000\017\000\017\000\ + \017\000\017\000\017\000\017\000\017\000\017\000\017\000\017\000\ + \017\000\017\000\017\000\255\255\255\255\255\255\255\255\255\255\ + \255\255\017\000\017\000\017\000\017\000\017\000\017\000\017\000\ + \017\000\017\000\017\000\017\000\017\000\017\000\017\000\017\000\ + \017\000\017\000\017\000\017\000\017\000\017\000\017\000\017\000\ + \017\000\017\000\017\000\018\000\018\000\018\000\018\000\018\000\ + \018\000\018\000\018\000\018\000\018\000\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\018\000\018\000\018\000\018\000\ + \018\000\018\000\018\000\018\000\018\000\018\000\018\000\018\000\ + \018\000\018\000\018\000\018\000\018\000\018\000\018\000\018\000\ + \018\000\018\000\018\000\018\000\018\000\018\000\255\255\255\255\ + \255\255\255\255\255\255\255\255\018\000\018\000\018\000\018\000\ + \018\000\018\000\018\000\018\000\018\000\018\000\018\000\018\000\ + \018\000\018\000\018\000\018\000\018\000\018\000\018\000\018\000\ + \018\000\018\000\018\000\018\000\018\000\018\000\032\000\033\000\ + \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\ + \033\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\255\255\032\000\045\000\ + \255\255\255\255\036\000\255\255\045\000\255\255\036\000\044\000\ + \047\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\036\000\036\000\036\000\036\000\036\000\036\000\036\000\ + \036\000\036\000\036\000\036\000\036\000\036\000\036\000\036\000\ + \036\000\036\000\036\000\036\000\036\000\036\000\036\000\036\000\ + \036\000\036\000\036\000\255\255\255\255\255\255\255\255\255\255\ + \032\000\036\000\036\000\036\000\036\000\036\000\036\000\036\000\ + \036\000\036\000\036\000\036\000\036\000\036\000\036\000\036\000\ + \036\000\036\000\036\000\036\000\036\000\036\000\036\000\036\000\ + \036\000\036\000\036\000\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\043\000\ + \043\000\043\000\043\000\043\000\043\000\043\000\043\000\043\000\ + \043\000\043\000\043\000\043\000\043\000\043\000\043\000\043\000\ + \043\000\043\000\043\000\043\000\043\000\043\000\043\000\043\000\ + \043\000\255\255\255\255\255\255\255\255\255\255\255\255\043\000\ + \043\000\043\000\043\000\043\000\043\000\043\000\043\000\043\000\ + \043\000\043\000\043\000\043\000\043\000\043\000\043\000\043\000\ + \043\000\043\000\043\000\043\000\043\000\043\000\043\000\043\000\ + \043\000\049\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\049\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\045\000\255\255\255\255\ + \255\255\255\255\255\255\255\255\032\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\255\255\255\255\255\255\ + \255\255\255\255\255\255\049\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\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\055\000\055\000\ + \055\000\055\000\055\000\055\000\055\000\055\000\055\000\055\000\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\055\000\ + \055\000\055\000\055\000\055\000\055\000\055\000\055\000\055\000\ + \055\000\055\000\055\000\055\000\055\000\055\000\055\000\055\000\ + \055\000\055\000\055\000\055\000\055\000\055\000\055\000\055\000\ + \055\000\255\255\255\255\255\255\255\255\255\255\255\255\055\000\ + \055\000\055\000\055\000\055\000\055\000\055\000\055\000\055\000\ + \055\000\055\000\055\000\055\000\055\000\055\000\055\000\055\000\ + \055\000\055\000\055\000\055\000\055\000\055\000\055\000\055\000\ + \055\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\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\049\000\ + \056\000\056\000\056\000\056\000\056\000\056\000\056\000\056\000\ + \056\000\056\000\056\000\056\000\056\000\056\000\056\000\056\000\ + \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\ + \056\000\056\000\056\000\056\000\056\000\056\000\056\000\056\000\ + \056\000\056\000\056\000\056\000\056\000\056\000\056\000\056\000\ + \056\000\056\000\056\000\056\000\056\000\056\000\056\000\056\000\ + \056\000\056\000\057\000\057\000\057\000\057\000\057\000\057\000\ + \057\000\057\000\057\000\057\000\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\057\000\057\000\057\000\057\000\057\000\ + \057\000\057\000\057\000\057\000\057\000\057\000\057\000\057\000\ + \057\000\057\000\057\000\057\000\057\000\057\000\057\000\057\000\ + \057\000\057\000\057\000\057\000\057\000\255\255\255\255\255\255\ + \255\255\255\255\255\255\057\000\057\000\057\000\057\000\057\000\ + \057\000\057\000\057\000\057\000\057\000\057\000\057\000\057\000\ + \057\000\057\000\057\000\057\000\057\000\057\000\057\000\057\000\ + \057\000\057\000\057\000\057\000\057\000\058\000\058\000\058\000\ + \058\000\058\000\058\000\058\000\058\000\058\000\058\000\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\058\000\058\000\ + \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\ + \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\ + \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\ + \255\255\255\255\255\255\255\255\255\255\255\255\058\000\058\000\ + \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\ + \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\ + \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\ + \059\000\059\000\059\000\059\000\059\000\059\000\059\000\059\000\ + \059\000\059\000\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\059\000\059\000\059\000\059\000\059\000\059\000\059\000\ + \059\000\059\000\059\000\059\000\059\000\059\000\059\000\059\000\ + \059\000\059\000\059\000\059\000\059\000\059\000\059\000\059\000\ + \059\000\059\000\059\000\255\255\255\255\255\255\255\255\255\255\ + \255\255\059\000\059\000\059\000\059\000\059\000\059\000\059\000\ + \059\000\059\000\059\000\059\000\059\000\059\000\059\000\059\000\ + \059\000\059\000\059\000\059\000\059\000\059\000\059\000\059\000\ + \059\000\059\000\059\000\060\000\060\000\060\000\060\000\060\000\ + \060\000\060\000\060\000\060\000\060\000\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\060\000\060\000\060\000\060\000\ + \060\000\060\000\060\000\060\000\060\000\060\000\060\000\060\000\ + \060\000\060\000\060\000\060\000\060\000\060\000\060\000\060\000\ + \060\000\060\000\060\000\060\000\060\000\060\000\255\255\255\255\ + \255\255\255\255\255\255\255\255\060\000\060\000\060\000\060\000\ + \060\000\060\000\060\000\060\000\060\000\060\000\060\000\060\000\ + \060\000\060\000\060\000\060\000\060\000\060\000\060\000\060\000\ + \060\000\060\000\060\000\060\000\060\000\060\000\061\000\061\000\ + \061\000\061\000\061\000\061\000\061\000\061\000\061\000\061\000\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\061\000\ + \061\000\061\000\061\000\061\000\061\000\061\000\061\000\061\000\ + \061\000\061\000\061\000\061\000\061\000\061\000\061\000\061\000\ + \061\000\061\000\061\000\061\000\061\000\061\000\061\000\061\000\ + \061\000\255\255\255\255\255\255\255\255\255\255\255\255\061\000\ + \061\000\061\000\061\000\061\000\061\000\061\000\061\000\061\000\ + \061\000\061\000\061\000\061\000\061\000\061\000\061\000\061\000\ + \061\000\061\000\061\000\061\000\061\000\061\000\061\000\061\000\ + \061\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\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\ + \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\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\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\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\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\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\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\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\065\000\065\000\065\000\065\000\065\000\065\000\065\000\ + \065\000\065\000\065\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\065\000\065\000\065\000\065\000\065\000\ + \065\000\065\000\065\000\065\000\065\000\065\000\065\000\065\000\ + \065\000\065\000\065\000\065\000\065\000\065\000\065\000\065\000\ + \065\000\065\000\065\000\065\000\065\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\255\255\255\255\255\255\066\000\066\000\ + \066\000\066\000\066\000\066\000\066\000\066\000\066\000\066\000\ + \066\000\066\000\066\000\066\000\066\000\066\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\255\255\255\255\066\000\066\000\ + \066\000\066\000\066\000\066\000\066\000\066\000\066\000\066\000\ + \066\000\066\000\066\000\066\000\066\000\066\000\066\000\066\000\ + \066\000\066\000\066\000\066\000\066\000\066\000\066\000\066\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\ + \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\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\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\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\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\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\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\071\000\071\000\071\000\071\000\ + \071\000\071\000\071\000\071\000\071\000\071\000\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\071\000\071\000\071\000\ + \071\000\071\000\071\000\071\000\071\000\071\000\071\000\071\000\ + \071\000\071\000\071\000\071\000\071\000\071\000\071\000\071\000\ + \071\000\071\000\071\000\071\000\071\000\071\000\071\000\255\255\ + \255\255\255\255\255\255\255\255\255\255\071\000\071\000\071\000\ + \071\000\071\000\071\000\071\000\071\000\071\000\071\000\071\000\ + \071\000\071\000\071\000\071\000\071\000\071\000\071\000\071\000\ + \071\000\071\000\071\000\071\000\071\000\071\000\071\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\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\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\074\000\074\000\074\000\ + \074\000\074\000\074\000\074\000\074\000\074\000\074\000\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\074\000\074\000\ + \074\000\074\000\074\000\074\000\074\000\074\000\074\000\074\000\ + \074\000\074\000\074\000\074\000\074\000\074\000\074\000\074\000\ + \074\000\074\000\074\000\074\000\074\000\074\000\074\000\074\000\ + \255\255\255\255\255\255\255\255\255\255\255\255\074\000\074\000\ + \074\000\074\000\074\000\074\000\074\000\074\000\074\000\074\000\ + \074\000\074\000\074\000\074\000\074\000\074\000\074\000\074\000\ + \074\000\074\000\074\000\074\000\074\000\074\000\074\000\074\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\ + \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\076\000\076\000\076\000\076\000\076\000\ + \076\000\076\000\076\000\076\000\076\000\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\076\000\076\000\076\000\076\000\ + \076\000\076\000\076\000\076\000\076\000\076\000\076\000\076\000\ + \076\000\076\000\076\000\076\000\076\000\076\000\076\000\076\000\ + \076\000\076\000\076\000\076\000\076\000\076\000\255\255\255\255\ + \255\255\255\255\255\255\255\255\076\000\076\000\076\000\076\000\ + \076\000\076\000\076\000\076\000\076\000\076\000\076\000\076\000\ + \076\000\076\000\076\000\076\000\076\000\076\000\076\000\076\000\ + \076\000\076\000\076\000\076\000\076\000\076\000\077\000\077\000\ + \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\077\000\ + \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\ + \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\ + \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\ + \077\000\255\255\255\255\255\255\255\255\255\255\255\255\077\000\ + \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\ + \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\ + \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\ + \077\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\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\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\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\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\ + \080\000\080\000\080\000\080\000\080\000\080\000\080\000\080\000\ + \080\000\080\000\080\000\080\000\080\000\080\000\080\000\080\000\ + \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\ + \080\000\080\000\080\000\080\000\080\000\080\000\080\000\080\000\ + \080\000\080\000\080\000\080\000\080\000\080\000\080\000\080\000\ + \080\000\080\000\080\000\080\000\080\000\080\000\080\000\080\000\ + \080\000\080\000\081\000\081\000\081\000\081\000\081\000\081\000\ + \081\000\081\000\081\000\081\000\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\081\000\081\000\081\000\081\000\081\000\ + \081\000\081\000\081\000\081\000\081\000\081\000\081\000\081\000\ + \081\000\081\000\081\000\081\000\081\000\081\000\081\000\081\000\ + \081\000\081\000\081\000\081\000\081\000\255\255\255\255\255\255\ + \255\255\255\255\255\255\081\000\081\000\081\000\081\000\081\000\ + \081\000\081\000\081\000\081\000\081\000\081\000\081\000\081\000\ + \081\000\081\000\081\000\081\000\081\000\081\000\081\000\081\000\ + \081\000\081\000\081\000\081\000\081\000\082\000\082\000\082\000\ + \082\000\082\000\082\000\082\000\082\000\082\000\082\000\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\082\000\082\000\ + \082\000\082\000\082\000\082\000\082\000\082\000\082\000\082\000\ + \082\000\082\000\082\000\082\000\082\000\082\000\082\000\082\000\ + \082\000\082\000\082\000\082\000\082\000\082\000\082\000\082\000\ + \255\255\255\255\255\255\255\255\255\255\255\255\082\000\082\000\ + \082\000\082\000\082\000\082\000\082\000\082\000\082\000\082\000\ + \082\000\082\000\082\000\082\000\082\000\082\000\082\000\082\000\ + \082\000\082\000\082\000\082\000\082\000\082\000\082\000\082\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\ + \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\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\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\ + \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\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\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\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\087\000\087\000\087\000\087\000\ + \087\000\087\000\087\000\087\000\087\000\087\000\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\087\000\087\000\087\000\ + \087\000\087\000\087\000\087\000\087\000\087\000\087\000\087\000\ + \087\000\087\000\087\000\087\000\087\000\087\000\087\000\087\000\ + \087\000\087\000\087\000\087\000\087\000\087\000\087\000\255\255\ + \255\255\255\255\255\255\255\255\255\255\087\000\087\000\087\000\ + \087\000\087\000\087\000\087\000\087\000\087\000\087\000\087\000\ + \087\000\087\000\087\000\087\000\087\000\087\000\087\000\087\000\ + \087\000\087\000\087\000\087\000\087\000\087\000\087\000\088\000\ + \088\000\088\000\088\000\088\000\088\000\088\000\088\000\088\000\ + \088\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \088\000\088\000\088\000\088\000\088\000\088\000\088\000\088\000\ + \088\000\088\000\088\000\088\000\088\000\088\000\088\000\088\000\ + \088\000\088\000\088\000\088\000\088\000\088\000\088\000\088\000\ + \088\000\088\000\255\255\255\255\255\255\255\255\255\255\255\255\ + \088\000\088\000\088\000\088\000\088\000\088\000\088\000\088\000\ + \088\000\088\000\088\000\088\000\088\000\088\000\088\000\088\000\ + \088\000\088\000\088\000\088\000\088\000\088\000\088\000\088\000\ + \088\000\088\000\089\000\089\000\089\000\089\000\089\000\089\000\ + \089\000\089\000\089\000\089\000\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\089\000\089\000\089\000\089\000\089\000\ + \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\ + \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\ + \089\000\089\000\089\000\089\000\089\000\255\255\255\255\255\255\ + \255\255\255\255\255\255\089\000\089\000\089\000\089\000\089\000\ + \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\ + \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\ + \089\000\089\000\089\000\089\000\089\000\090\000\090\000\090\000\ + \090\000\090\000\090\000\090\000\090\000\090\000\090\000\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\090\000\090\000\ + \090\000\090\000\090\000\090\000\090\000\090\000\090\000\090\000\ + \090\000\090\000\090\000\090\000\090\000\090\000\090\000\090\000\ + \090\000\090\000\090\000\090\000\090\000\090\000\090\000\090\000\ + \255\255\255\255\255\255\255\255\255\255\255\255\090\000\090\000\ + \090\000\090\000\090\000\090\000\090\000\090\000\090\000\090\000\ + \090\000\090\000\090\000\090\000\090\000\090\000\090\000\090\000\ + \090\000\090\000\090\000\090\000\090\000\090\000\090\000\090\000\ + \091\000\091\000\091\000\091\000\091\000\091\000\091\000\091\000\ + \091\000\091\000\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\091\000\091\000\091\000\091\000\091\000\091\000\091\000\ + \091\000\091\000\091\000\091\000\091\000\091\000\091\000\091\000\ + \091\000\091\000\091\000\091\000\091\000\091\000\091\000\091\000\ + \091\000\091\000\091\000\255\255\255\255\255\255\255\255\255\255\ + \255\255\091\000\091\000\091\000\091\000\091\000\091\000\091\000\ + \091\000\091\000\091\000\091\000\091\000\091\000\091\000\091\000\ + \091\000\091\000\091\000\091\000\091\000\091\000\091\000\091\000\ + \091\000\091\000\091\000\092\000\092\000\092\000\092\000\092\000\ + \092\000\092\000\092\000\092\000\092\000\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\092\000\092\000\092\000\092\000\ + \092\000\092\000\092\000\092\000\092\000\092\000\092\000\092\000\ + \092\000\092\000\092\000\092\000\092\000\092\000\092\000\092\000\ + \092\000\092\000\092\000\092\000\092\000\092\000\255\255\255\255\ + \255\255\255\255\255\255\255\255\092\000\092\000\092\000\092\000\ + \092\000\092\000\092\000\092\000\092\000\092\000\092\000\092\000\ + \092\000\092\000\092\000\092\000\092\000\092\000\092\000\092\000\ + \092\000\092\000\092\000\092\000\092\000\092\000\093\000\093\000\ + \093\000\093\000\093\000\093\000\093\000\093\000\093\000\093\000\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\093\000\ + \093\000\093\000\093\000\093\000\093\000\093\000\093\000\093\000\ + \093\000\093\000\093\000\093\000\093\000\093\000\093\000\093\000\ + \093\000\093\000\093\000\093\000\093\000\093\000\093\000\093\000\ + \093\000\255\255\255\255\255\255\255\255\255\255\255\255\093\000\ + \093\000\093\000\093\000\093\000\093\000\093\000\093\000\093\000\ + \093\000\093\000\093\000\093\000\093\000\093\000\093\000\093\000\ + \093\000\093\000\093\000\093\000\093\000\093\000\093\000\093\000\ + \093\000\094\000\094\000\094\000\094\000\094\000\094\000\094\000\ + \094\000\094\000\094\000\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\094\000\094\000\094\000\094\000\094\000\094\000\ + \094\000\094\000\094\000\094\000\094\000\094\000\094\000\094\000\ + \094\000\094\000\094\000\094\000\094\000\094\000\094\000\094\000\ + \094\000\094\000\094\000\094\000\255\255\255\255\255\255\255\255\ + \255\255\255\255\094\000\094\000\094\000\094\000\094\000\094\000\ + \094\000\094\000\094\000\094\000\094\000\094\000\094\000\094\000\ + \094\000\094\000\094\000\094\000\094\000\094\000\094\000\094\000\ + \094\000\094\000\094\000\094\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 = + ""; + Lexing.lex_backtrk_code = + ""; + Lexing.lex_default_code = + ""; + Lexing.lex_trans_code = + ""; + Lexing.lex_check_code = + ""; + Lexing.lex_code = + ""; +} + +let rec token lexbuf = + __ocaml_lex_token_rec lexbuf 0 +and __ocaml_lex_token_rec lexbuf __ocaml_lex_state = + match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with + | 0 -> +# 28 "lexer.mll" + ( token lexbuf ) +# 1195 "lexer.ml" + + | 1 -> +# 30 "lexer.mll" + (advance_line lexbuf; token lexbuf ) +# 1200 "lexer.ml" + + | 2 -> +# 32 "lexer.mll" + ( advance_line lexbuf; token lexbuf ) +# 1205 "lexer.ml" + + | 3 -> +# 34 "lexer.mll" + ( token lexbuf ) +# 1210 "lexer.ml" + + | 4 -> +let +# 35 "lexer.mll" + i +# 1216 "lexer.ml" += Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos lexbuf.Lexing.lex_curr_pos in +# 35 "lexer.mll" + ( INTCONSTANT (int_of_string i)) +# 1220 "lexer.ml" + + | 5 -> +let +# 36 "lexer.mll" + fp +# 1226 "lexer.ml" += Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos lexbuf.Lexing.lex_curr_pos in +# 36 "lexer.mll" + ( FLOATCONSTANT (float_of_string fp)) +# 1230 "lexer.ml" + + | 6 -> +let +# 37 "lexer.mll" + l +# 1236 "lexer.ml" += Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos lexbuf.Lexing.lex_curr_pos in +# 37 "lexer.mll" + ( LITCONSTANT l ) +# 1240 "lexer.ml" + + | 7 -> +let +# 38 "lexer.mll" + s +# 1246 "lexer.ml" += Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos lexbuf.Lexing.lex_curr_pos in +# 38 "lexer.mll" + ( STRINGCONSTANT (String.sub s 1 (String.length s - 2)) ) +# 1250 "lexer.ml" + + | 8 -> +# 39 "lexer.mll" + ( PLUS ) +# 1255 "lexer.ml" + + | 9 -> +# 40 "lexer.mll" + ( MINUS ) +# 1260 "lexer.ml" + + | 10 -> +# 41 "lexer.mll" + ( TIMES ) +# 1265 "lexer.ml" + + | 11 -> +# 42 "lexer.mll" + ( DIV ) +# 1270 "lexer.ml" + + | 12 -> +# 43 "lexer.mll" + ( MOD ) +# 1275 "lexer.ml" + + | 13 -> +# 45 "lexer.mll" + ( FPLUS ) +# 1280 "lexer.ml" + + | 14 -> +# 46 "lexer.mll" + ( FMINUS ) +# 1285 "lexer.ml" + + | 15 -> +# 47 "lexer.mll" + ( FTIMES ) +# 1290 "lexer.ml" + + | 16 -> +# 48 "lexer.mll" + ( FDIV ) +# 1295 "lexer.ml" + + | 17 -> +# 50 "lexer.mll" + ( LPAREN ) +# 1300 "lexer.ml" + + | 18 -> +# 51 "lexer.mll" + ( RPAREN ) +# 1305 "lexer.ml" + + | 19 -> +# 52 "lexer.mll" + ( LBRACE ) +# 1310 "lexer.ml" + + | 20 -> +# 53 "lexer.mll" + ( RBRACE ) +# 1315 "lexer.ml" + + | 21 -> +# 54 "lexer.mll" + ( EQ ) +# 1320 "lexer.ml" + + | 22 -> +# 55 "lexer.mll" + ( COMMA ) +# 1325 "lexer.ml" + + | 23 -> +# 56 "lexer.mll" + ( SEMICOLON ) +# 1330 "lexer.ml" + + | 24 -> +# 57 "lexer.mll" + ( COLON ) +# 1335 "lexer.ml" + + | 25 -> +# 58 "lexer.mll" + ( QMARK ) +# 1340 "lexer.ml" + + | 26 -> +# 60 "lexer.mll" + (TP BoolT) +# 1345 "lexer.ml" + + | 27 -> +# 61 "lexer.mll" + (TP FloatT) +# 1350 "lexer.ml" + + | 28 -> +# 62 "lexer.mll" + (TP IntT) +# 1355 "lexer.ml" + + | 29 -> +# 63 "lexer.mll" + (TP LitT) +# 1360 "lexer.ml" + + | 30 -> +# 64 "lexer.mll" + (TP StringT) +# 1365 "lexer.ml" + + | 31 -> +# 65 "lexer.mll" + (TP VoidT) +# 1370 "lexer.ml" + + | 32 -> +# 67 "lexer.mll" + (BCONSTANT true) +# 1375 "lexer.ml" + + | 33 -> +# 68 "lexer.mll" + (BCONSTANT false) +# 1380 "lexer.ml" + + | 34 -> +# 69 "lexer.mll" + (IF) +# 1385 "lexer.ml" + + | 35 -> +# 70 "lexer.mll" + (ELSE) +# 1390 "lexer.ml" + + | 36 -> +# 71 "lexer.mll" + (WHILE) +# 1395 "lexer.ml" + + | 37 -> +# 72 "lexer.mll" + (FOR) +# 1400 "lexer.ml" + + | 38 -> +# 73 "lexer.mll" + (RETURN) +# 1405 "lexer.ml" + + | 39 -> +# 75 "lexer.mll" + (BCEQ) +# 1410 "lexer.ml" + + | 40 -> +# 76 "lexer.mll" + (BCGE) +# 1415 "lexer.ml" + + | 41 -> +# 77 "lexer.mll" + (BCGT) +# 1420 "lexer.ml" + + | 42 -> +# 78 "lexer.mll" + (BCLE) +# 1425 "lexer.ml" + + | 43 -> +# 79 "lexer.mll" + (BCLT) +# 1430 "lexer.ml" + + | 44 -> +# 80 "lexer.mll" + (BCNE) +# 1435 "lexer.ml" + + | 45 -> +# 82 "lexer.mll" + (BLAND) +# 1440 "lexer.ml" + + | 46 -> +# 83 "lexer.mll" + (BLOR) +# 1445 "lexer.ml" + + | 47 -> +# 85 "lexer.mll" + (EOF) +# 1450 "lexer.ml" + + | 48 -> +let +# 87 "lexer.mll" + i +# 1456 "lexer.ml" += Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos lexbuf.Lexing.lex_curr_pos in +# 87 "lexer.mll" + (IDENTIFIER i) +# 1460 "lexer.ml" + + | 49 -> +# 89 "lexer.mll" + (Printf.printf "ERROR: unrecogized symbol '%s'\n" (Lexing.lexeme lexbuf); + raise Lexerror ) +# 1466 "lexer.ml" + + | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; + __ocaml_lex_token_rec lexbuf __ocaml_lex_state + +and ruleTail acc lexbuf = + __ocaml_lex_ruleTail_rec acc lexbuf 100 +and __ocaml_lex_ruleTail_rec acc lexbuf __ocaml_lex_state = + match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with + | 0 -> +# 94 "lexer.mll" + ( acc ) +# 1478 "lexer.ml" + + | 1 -> +let +# 95 "lexer.mll" + str +# 1484 "lexer.ml" += Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos lexbuf.Lexing.lex_curr_pos in +# 95 "lexer.mll" + ( ruleTail (acc ^ str) lexbuf ) +# 1488 "lexer.ml" + + | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; + __ocaml_lex_ruleTail_rec acc lexbuf __ocaml_lex_state + +;; + diff --git a/lib/parser.cmi b/lib/parser.cmi new file mode 100644 index 0000000..fbe6071 Binary files /dev/null and b/lib/parser.cmi differ diff --git a/lib/parser.ml b/lib/parser.ml new file mode 100644 index 0000000..c08b368 --- /dev/null +++ b/lib/parser.ml @@ -0,0 +1,879 @@ +type token = + | IDENTIFIER of (string) + | LITCONSTANT of (string) + | STRINGCONSTANT of (string) + | TP of (Lang.tp) + | BCONSTANT of (bool) + | INTCONSTANT of (int) + | FLOATCONSTANT of (float) + | PLUS + | MINUS + | TIMES + | DIV + | MOD + | FPLUS + | FMINUS + | FTIMES + | FDIV + | LPAREN + | RPAREN + | LBRACE + | RBRACE + | EQ + | COMMA + | SEMICOLON + | COLON + | QMARK + | IF + | ELSE + | WHILE + | FOR + | RETURN + | BCEQ + | BCGE + | BCGT + | BCLE + | BCLT + | BCNE + | BLAND + | BLOR + | EOF + +open Parsing;; +let _ = parse_error;; +# 2 "parser.mly" +open Lang +# 47 "parser.ml" +let yytransl_const = [| + 264 (* PLUS *); + 265 (* MINUS *); + 266 (* TIMES *); + 267 (* DIV *); + 268 (* MOD *); + 269 (* FPLUS *); + 270 (* FMINUS *); + 271 (* FTIMES *); + 272 (* FDIV *); + 273 (* LPAREN *); + 274 (* RPAREN *); + 275 (* LBRACE *); + 276 (* RBRACE *); + 277 (* EQ *); + 278 (* COMMA *); + 279 (* SEMICOLON *); + 280 (* COLON *); + 281 (* QMARK *); + 282 (* IF *); + 283 (* ELSE *); + 284 (* WHILE *); + 285 (* FOR *); + 286 (* RETURN *); + 287 (* BCEQ *); + 288 (* BCGE *); + 289 (* BCGT *); + 290 (* BCLE *); + 291 (* BCLT *); + 292 (* BCNE *); + 293 (* BLAND *); + 294 (* BLOR *); + 0 (* EOF *); + 0|] + +let yytransl_block = [| + 257 (* IDENTIFIER *); + 258 (* LITCONSTANT *); + 259 (* STRINGCONSTANT *); + 260 (* TP *); + 261 (* BCONSTANT *); + 262 (* INTCONSTANT *); + 263 (* FLOATCONSTANT *); + 0|] + +let yylhs = "\255\255\ +\001\000\002\000\002\000\002\000\002\000\004\000\003\000\006\000\ +\006\000\007\000\007\000\008\000\009\000\009\000\009\000\009\000\ +\009\000\009\000\009\000\009\000\011\000\011\000\012\000\012\000\ +\013\000\013\000\014\000\015\000\015\000\015\000\015\000\015\000\ +\016\000\016\000\017\000\017\000\017\000\017\000\018\000\018\000\ +\019\000\020\000\020\000\020\000\020\000\020\000\021\000\021\000\ +\021\000\022\000\022\000\023\000\023\000\010\000\024\000\024\000\ +\024\000\024\000\024\000\025\000\005\000\005\000\030\000\030\000\ +\026\000\026\000\033\000\032\000\031\000\027\000\027\000\028\000\ +\029\000\000\000" + +let yylen = "\002\000\ +\001\000\002\000\001\000\003\000\002\000\004\000\005\000\000\000\ +\001\000\001\000\003\000\002\000\001\000\001\000\001\000\001\000\ +\001\000\001\000\003\000\007\000\001\000\004\000\000\000\001\000\ +\001\000\003\000\001\000\001\000\001\000\001\000\001\000\001\000\ +\001\000\003\000\001\000\001\000\001\000\001\000\001\000\003\000\ +\001\000\001\000\003\000\003\000\003\000\003\000\001\000\003\000\ +\003\000\001\000\003\000\001\000\003\000\001\000\001\000\001\000\ +\001\000\001\000\001\000\003\000\000\000\001\000\001\000\002\000\ +\002\000\002\000\004\000\003\000\001\000\003\000\005\000\003\000\ +\003\000\002\000" + +let yydefred = "\000\000\ +\000\000\000\000\000\000\074\000\000\000\000\000\003\000\000\000\ +\000\000\005\000\000\000\002\000\000\000\004\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\069\000\055\000\056\000\057\000\ +\058\000\059\000\000\000\063\000\000\000\000\000\000\000\000\000\ +\000\000\010\000\000\000\000\000\000\000\000\000\017\000\018\000\ +\014\000\015\000\016\000\000\000\021\000\000\000\027\000\033\000\ +\000\000\000\000\042\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\006\000\064\000\065\000\066\000\012\000\007\000\000\000\ +\025\000\000\000\000\000\068\000\060\000\000\000\000\000\000\000\ +\028\000\029\000\030\000\031\000\032\000\000\000\035\000\036\000\ +\037\000\038\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\072\000\073\000\011\000\067\000\000\000\ +\000\000\019\000\000\000\000\000\034\000\000\000\046\000\044\000\ +\045\000\043\000\000\000\000\000\000\000\000\000\026\000\022\000\ +\000\000\071\000\000\000\000\000\020\000" + +let yydgoto = "\002\000\ +\004\000\005\000\006\000\007\000\020\000\032\000\033\000\034\000\ +\045\000\065\000\047\000\066\000\067\000\048\000\078\000\049\000\ +\083\000\050\000\051\000\052\000\053\000\054\000\055\000\021\000\ +\022\000\023\000\024\000\025\000\026\000\027\000\028\000\029\000\ +\030\000" + +let yysindex = "\003\000\ +\011\255\000\000\016\255\000\000\011\255\251\254\000\000\031\255\ +\026\255\000\000\180\255\000\000\051\255\000\000\014\255\180\255\ +\005\255\005\255\005\255\060\255\000\000\000\000\000\000\000\000\ +\000\000\000\000\180\255\000\000\058\255\061\255\082\255\069\255\ +\066\255\000\000\005\255\005\255\072\255\076\255\000\000\000\000\ +\000\000\000\000\000\000\005\255\000\000\180\255\000\000\000\000\ +\057\255\012\255\000\000\042\255\253\254\052\255\056\255\180\255\ +\074\255\000\000\000\000\000\000\000\000\000\000\000\000\051\255\ +\000\000\086\255\084\255\000\000\000\000\005\255\247\254\094\255\ +\000\000\000\000\000\000\000\000\000\000\005\255\000\000\000\000\ +\000\000\000\000\005\255\005\255\005\255\005\255\005\255\005\255\ +\005\255\005\255\005\255\000\000\000\000\000\000\000\000\005\255\ +\104\255\000\000\005\255\180\255\000\000\057\255\000\000\000\000\ +\000\000\000\000\042\255\042\255\253\254\052\255\000\000\000\000\ +\101\255\000\000\005\255\108\255\000\000" + +let yyrindex = "\000\000\ +\000\000\000\000\000\000\000\000\127\000\000\000\000\000\000\000\ +\000\000\000\000\110\255\000\000\113\255\000\000\000\000\110\255\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\112\255\000\000\000\000\000\000\000\000\000\000\ +\117\255\000\000\118\255\000\000\000\000\028\255\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\077\255\141\255\000\000\167\255\245\255\041\000\093\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\126\255\000\000\000\000\118\255\000\000\004\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\115\255\000\000\000\000\ +\000\000\000\000\193\255\219\255\015\000\067\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000" + +let yygindex = "\000\000\ +\000\000\000\000\149\000\150\000\140\000\000\000\000\000\094\000\ +\000\000\239\255\000\000\087\000\000\000\083\000\000\000\079\000\ +\000\000\000\000\033\000\238\255\080\000\089\000\000\000\213\255\ +\000\000\000\000\000\000\000\000\000\000\000\000\155\000\000\000\ +\000\000" + +let yytablesize = 379 +let yytable = "\046\000\ +\056\000\057\000\072\000\001\000\070\000\038\000\039\000\040\000\ +\098\000\041\000\042\000\043\000\092\000\011\000\003\000\099\000\ +\008\000\012\000\068\000\079\000\080\000\044\000\070\000\070\000\ +\081\000\082\000\071\000\088\000\013\000\070\000\035\000\070\000\ +\089\000\070\000\036\000\013\000\013\000\013\000\013\000\013\000\ +\013\000\013\000\013\000\013\000\011\000\013\000\013\000\013\000\ +\014\000\013\000\013\000\013\000\013\000\013\000\031\000\013\000\ +\114\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ +\013\000\013\000\073\000\074\000\075\000\107\000\108\000\076\000\ +\077\000\084\000\085\000\086\000\087\000\039\000\111\000\058\000\ +\060\000\113\000\062\000\061\000\039\000\039\000\063\000\064\000\ +\090\000\039\000\039\000\069\000\070\000\091\000\039\000\039\000\ +\093\000\116\000\039\000\039\000\039\000\039\000\039\000\095\000\ +\039\000\096\000\039\000\039\000\039\000\039\000\039\000\039\000\ +\039\000\039\000\039\000\040\000\103\000\104\000\105\000\106\000\ +\100\000\112\000\040\000\040\000\115\000\117\000\001\000\040\000\ +\040\000\061\000\008\000\062\000\040\000\040\000\009\000\023\000\ +\040\000\040\000\040\000\040\000\040\000\041\000\040\000\024\000\ +\040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\ +\040\000\009\000\010\000\037\000\097\000\094\000\041\000\041\000\ +\101\000\102\000\041\000\041\000\041\000\041\000\041\000\047\000\ +\041\000\109\000\041\000\041\000\041\000\041\000\041\000\041\000\ +\041\000\041\000\041\000\110\000\015\000\059\000\000\000\000\000\ +\047\000\047\000\000\000\000\000\047\000\047\000\047\000\047\000\ +\047\000\048\000\047\000\000\000\047\000\047\000\016\000\000\000\ +\000\000\000\000\047\000\047\000\047\000\017\000\000\000\018\000\ +\000\000\019\000\048\000\048\000\000\000\000\000\048\000\048\000\ +\048\000\048\000\048\000\049\000\048\000\000\000\048\000\048\000\ +\000\000\000\000\000\000\000\000\048\000\048\000\048\000\000\000\ +\000\000\000\000\000\000\000\000\049\000\049\000\000\000\000\000\ +\049\000\049\000\049\000\049\000\049\000\050\000\049\000\000\000\ +\049\000\049\000\000\000\000\000\000\000\000\000\049\000\049\000\ +\049\000\000\000\000\000\000\000\000\000\000\000\050\000\050\000\ +\000\000\000\000\050\000\050\000\050\000\050\000\050\000\051\000\ +\050\000\000\000\050\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\050\000\050\000\000\000\000\000\000\000\000\000\000\000\ +\051\000\051\000\000\000\000\000\051\000\051\000\051\000\051\000\ +\051\000\052\000\051\000\000\000\051\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\051\000\051\000\000\000\000\000\000\000\ +\000\000\000\000\052\000\052\000\000\000\000\000\052\000\052\000\ +\052\000\052\000\052\000\053\000\052\000\000\000\052\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\053\000\053\000\000\000\000\000\ +\053\000\053\000\053\000\053\000\053\000\054\000\053\000\000\000\ +\053\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\053\000\000\000\000\000\000\000\000\000\000\000\054\000\054\000\ +\000\000\000\000\054\000\054\000\054\000\054\000\054\000\000\000\ +\054\000\000\000\054\000" + +let yycheck = "\017\000\ +\018\000\019\000\046\000\001\000\001\001\001\001\002\001\003\001\ +\018\001\005\001\006\001\007\001\056\000\019\001\004\001\025\001\ +\001\001\023\001\036\000\008\001\009\001\017\001\019\001\020\001\ +\013\001\014\001\044\000\031\001\001\001\026\001\017\001\028\001\ +\036\001\030\001\021\001\008\001\009\001\010\001\011\001\012\001\ +\013\001\014\001\015\001\016\001\019\001\018\001\019\001\017\001\ +\023\001\022\001\023\001\024\001\025\001\026\001\004\001\028\001\ +\100\000\030\001\031\001\032\001\033\001\034\001\035\001\036\001\ +\037\001\038\001\010\001\011\001\012\001\088\000\089\000\015\001\ +\016\001\032\001\033\001\034\001\035\001\001\001\096\000\020\001\ +\023\001\099\000\001\001\023\001\008\001\009\001\018\001\022\001\ +\037\001\013\001\014\001\020\001\017\001\038\001\018\001\019\001\ +\023\001\115\000\022\001\023\001\024\001\025\001\026\001\018\001\ +\028\001\022\001\030\001\031\001\032\001\033\001\034\001\035\001\ +\036\001\037\001\038\001\001\001\084\000\085\000\086\000\087\000\ +\027\001\018\001\008\001\009\001\024\001\018\001\000\000\013\001\ +\014\001\020\001\018\001\020\001\018\001\019\001\018\001\018\001\ +\022\001\023\001\024\001\025\001\026\001\001\001\028\001\018\001\ +\030\001\031\001\032\001\033\001\034\001\035\001\036\001\037\001\ +\038\001\005\000\005\000\016\000\070\000\064\000\018\001\019\001\ +\078\000\083\000\022\001\023\001\024\001\025\001\026\001\001\001\ +\028\001\090\000\030\001\031\001\032\001\033\001\034\001\035\001\ +\036\001\037\001\038\001\091\000\001\001\027\000\255\255\255\255\ +\018\001\019\001\255\255\255\255\022\001\023\001\024\001\025\001\ +\026\001\001\001\028\001\255\255\030\001\031\001\019\001\255\255\ +\255\255\255\255\036\001\037\001\038\001\026\001\255\255\028\001\ +\255\255\030\001\018\001\019\001\255\255\255\255\022\001\023\001\ +\024\001\025\001\026\001\001\001\028\001\255\255\030\001\031\001\ +\255\255\255\255\255\255\255\255\036\001\037\001\038\001\255\255\ +\255\255\255\255\255\255\255\255\018\001\019\001\255\255\255\255\ +\022\001\023\001\024\001\025\001\026\001\001\001\028\001\255\255\ +\030\001\031\001\255\255\255\255\255\255\255\255\036\001\037\001\ +\038\001\255\255\255\255\255\255\255\255\255\255\018\001\019\001\ +\255\255\255\255\022\001\023\001\024\001\025\001\026\001\001\001\ +\028\001\255\255\030\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\037\001\038\001\255\255\255\255\255\255\255\255\255\255\ +\018\001\019\001\255\255\255\255\022\001\023\001\024\001\025\001\ +\026\001\001\001\028\001\255\255\030\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\037\001\038\001\255\255\255\255\255\255\ +\255\255\255\255\018\001\019\001\255\255\255\255\022\001\023\001\ +\024\001\025\001\026\001\001\001\028\001\255\255\030\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\038\001\255\255\ +\255\255\255\255\255\255\255\255\018\001\019\001\255\255\255\255\ +\022\001\023\001\024\001\025\001\026\001\001\001\028\001\255\255\ +\030\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\038\001\255\255\255\255\255\255\255\255\255\255\018\001\019\001\ +\255\255\255\255\022\001\023\001\024\001\025\001\026\001\255\255\ +\028\001\255\255\030\001" + +let yynames_const = "\ + PLUS\000\ + MINUS\000\ + TIMES\000\ + DIV\000\ + MOD\000\ + FPLUS\000\ + FMINUS\000\ + FTIMES\000\ + FDIV\000\ + LPAREN\000\ + RPAREN\000\ + LBRACE\000\ + RBRACE\000\ + EQ\000\ + COMMA\000\ + SEMICOLON\000\ + COLON\000\ + QMARK\000\ + IF\000\ + ELSE\000\ + WHILE\000\ + FOR\000\ + RETURN\000\ + BCEQ\000\ + BCGE\000\ + BCGT\000\ + BCLE\000\ + BCLT\000\ + BCNE\000\ + BLAND\000\ + BLOR\000\ + EOF\000\ + " + +let yynames_block = "\ + IDENTIFIER\000\ + LITCONSTANT\000\ + STRINGCONSTANT\000\ + TP\000\ + BCONSTANT\000\ + INTCONSTANT\000\ + FLOATCONSTANT\000\ + " + +let yyact = [| + (fun _ -> failwith "parser") +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'fundecl_or_fundefn_list) in + Obj.repr( +# 25 "parser.mly" + ( let (fdcs, fdfs) = _1 in Prog (fdcs, fdfs) ) +# 335 "parser.ml" + : Lang.prog)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 1 : 'fundecl) in + Obj.repr( +# 29 "parser.mly" + ( ([_1], []) ) +# 342 "parser.ml" + : 'fundecl_or_fundefn_list)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'fundefn) in + Obj.repr( +# 30 "parser.mly" + ( ([], [_1]) ) +# 349 "parser.ml" + : 'fundecl_or_fundefn_list)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'fundecl_or_fundefn_list) in + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'fundecl) in + Obj.repr( +# 31 "parser.mly" + ( let (fdcs, fdfs) = _1 in (fdcs @ [_2], fdfs) ) +# 357 "parser.ml" + : 'fundecl_or_fundefn_list)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 1 : 'fundecl_or_fundefn_list) in + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'fundefn) in + Obj.repr( +# 32 "parser.mly" + ( let (fdcs, fdfs) = _1 in (fdcs, fdfs @ [_2]) ) +# 365 "parser.ml" + : 'fundecl_or_fundefn_list)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 3 : 'fundecl) in + let _3 = (Parsing.peek_val __caml_parser_env 1 : 'block_item_list_opt) in + Obj.repr( +# 38 "parser.mly" + ( Fundefn(_1, _3) ) +# 373 "parser.ml" + : 'fundefn)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 4 : Lang.tp) in + let _2 = (Parsing.peek_val __caml_parser_env 3 : string) in + let _4 = (Parsing.peek_val __caml_parser_env 1 : 'vardecl_comma_list_opt) in + Obj.repr( +# 42 "parser.mly" + ( Fundecl(_1, _2, _4) ) +# 382 "parser.ml" + : 'fundecl)) +; (fun __caml_parser_env -> + Obj.repr( +# 47 "parser.mly" + ( [] ) +# 388 "parser.ml" + : 'vardecl_comma_list_opt)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'vardecl_comma_list) in + Obj.repr( +# 49 "parser.mly" + ( _1 ) +# 395 "parser.ml" + : 'vardecl_comma_list_opt)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'vardecl) in + Obj.repr( +# 55 "parser.mly" + ( [_1] ) +# 402 "parser.ml" + : 'vardecl_comma_list)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'vardecl_comma_list) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'vardecl) in + Obj.repr( +# 57 "parser.mly" + ( _1 @ [_3] ) +# 410 "parser.ml" + : 'vardecl_comma_list)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 1 : Lang.tp) in + let _2 = (Parsing.peek_val __caml_parser_env 0 : string) in + Obj.repr( +# 61 "parser.mly" + ( Vardecl(_1, _2) ) +# 418 "parser.ml" + : 'vardecl)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in + Obj.repr( +# 70 "parser.mly" + ( VarE(_1) ) +# 425 "parser.ml" + : 'primary_expression)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : bool) in + Obj.repr( +# 72 "parser.mly" + ( Const(BoolV _1) ) +# 432 "parser.ml" + : 'primary_expression)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : int) in + Obj.repr( +# 74 "parser.mly" + ( Const(IntV _1) ) +# 439 "parser.ml" + : 'primary_expression)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : float) in + Obj.repr( +# 76 "parser.mly" + ( Const(FloatV _1) ) +# 446 "parser.ml" + : 'primary_expression)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in + Obj.repr( +# 78 "parser.mly" + ( Const(LitV _1) ) +# 453 "parser.ml" + : 'primary_expression)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in + Obj.repr( +# 80 "parser.mly" + ( Const(StringV _1) ) +# 460 "parser.ml" + : 'primary_expression)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'expression) in + Obj.repr( +# 82 "parser.mly" + ( _2 ) +# 467 "parser.ml" + : 'primary_expression)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 5 : 'expression) in + let _4 = (Parsing.peek_val __caml_parser_env 3 : 'expression) in + let _6 = (Parsing.peek_val __caml_parser_env 1 : 'expression) in + Obj.repr( +# 84 "parser.mly" + ( CondE (_2, _4, _6) ) +# 476 "parser.ml" + : 'primary_expression)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'primary_expression) in + Obj.repr( +# 90 "parser.mly" + ( _1 ) +# 483 "parser.ml" + : 'postfix_expression)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 3 : string) in + let _3 = (Parsing.peek_val __caml_parser_env 1 : 'argument_expression_list_opt) in + Obj.repr( +# 92 "parser.mly" + ( CallE(_1, _3) ) +# 491 "parser.ml" + : 'postfix_expression)) +; (fun __caml_parser_env -> + Obj.repr( +# 97 "parser.mly" + ( [] ) +# 497 "parser.ml" + : 'argument_expression_list_opt)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'argument_expression_list) in + Obj.repr( +# 99 "parser.mly" + ( _1 ) +# 504 "parser.ml" + : 'argument_expression_list_opt)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'expression) in + Obj.repr( +# 104 "parser.mly" + ( [_1] ) +# 511 "parser.ml" + : 'argument_expression_list)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'argument_expression_list) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'expression) in + Obj.repr( +# 106 "parser.mly" + ( _1 @ [_3] ) +# 519 "parser.ml" + : 'argument_expression_list)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'postfix_expression) in + Obj.repr( +# 111 "parser.mly" + ( _1 ) +# 526 "parser.ml" + : 'unary_expression)) +; (fun __caml_parser_env -> + Obj.repr( +# 117 "parser.mly" + ( BAmul ) +# 532 "parser.ml" + : 'multiplicative_op)) +; (fun __caml_parser_env -> + Obj.repr( +# 118 "parser.mly" + ( BAdiv ) +# 538 "parser.ml" + : 'multiplicative_op)) +; (fun __caml_parser_env -> + Obj.repr( +# 119 "parser.mly" + ( BAmod ) +# 544 "parser.ml" + : 'multiplicative_op)) +; (fun __caml_parser_env -> + Obj.repr( +# 120 "parser.mly" + ( BAfmul ) +# 550 "parser.ml" + : 'multiplicative_op)) +; (fun __caml_parser_env -> + Obj.repr( +# 121 "parser.mly" + ( BAfdiv ) +# 556 "parser.ml" + : 'multiplicative_op)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'unary_expression) in + Obj.repr( +# 126 "parser.mly" + ( _1 ) +# 563 "parser.ml" + : 'multiplicative_expression)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'multiplicative_expression) in + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'multiplicative_op) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'unary_expression) in + Obj.repr( +# 128 "parser.mly" + ( BinOp(BArith _2, _1, _3) ) +# 572 "parser.ml" + : 'multiplicative_expression)) +; (fun __caml_parser_env -> + Obj.repr( +# 133 "parser.mly" + ( BAadd ) +# 578 "parser.ml" + : 'additive_op)) +; (fun __caml_parser_env -> + Obj.repr( +# 134 "parser.mly" + ( BAsub ) +# 584 "parser.ml" + : 'additive_op)) +; (fun __caml_parser_env -> + Obj.repr( +# 135 "parser.mly" + ( BAfadd ) +# 590 "parser.ml" + : 'additive_op)) +; (fun __caml_parser_env -> + Obj.repr( +# 136 "parser.mly" + ( BAfsub ) +# 596 "parser.ml" + : 'additive_op)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'multiplicative_expression) in + Obj.repr( +# 141 "parser.mly" + ( _1 ) +# 603 "parser.ml" + : 'additive_expression)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'additive_expression) in + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'additive_op) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'multiplicative_expression) in + Obj.repr( +# 143 "parser.mly" + ( BinOp(BArith _2, _1, _3) ) +# 612 "parser.ml" + : 'additive_expression)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'additive_expression) in + Obj.repr( +# 148 "parser.mly" + ( _1 ) +# 619 "parser.ml" + : 'shift_expression)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'shift_expression) in + Obj.repr( +# 153 "parser.mly" + ( _1 ) +# 626 "parser.ml" + : 'relational_expression)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'relational_expression) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'shift_expression) in + Obj.repr( +# 155 "parser.mly" + ( BinOp(BCompar BClt, _1, _3) ) +# 634 "parser.ml" + : 'relational_expression)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'relational_expression) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'shift_expression) in + Obj.repr( +# 157 "parser.mly" + ( BinOp(BCompar BCgt, _1, _3) ) +# 642 "parser.ml" + : 'relational_expression)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'relational_expression) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'shift_expression) in + Obj.repr( +# 159 "parser.mly" + ( BinOp(BCompar BCle, _1, _3) ) +# 650 "parser.ml" + : 'relational_expression)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'relational_expression) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'shift_expression) in + Obj.repr( +# 161 "parser.mly" + ( BinOp(BCompar BCge, _1, _3) ) +# 658 "parser.ml" + : 'relational_expression)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'relational_expression) in + Obj.repr( +# 166 "parser.mly" + ( _1 ) +# 665 "parser.ml" + : 'equality_expression)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'equality_expression) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'relational_expression) in + Obj.repr( +# 168 "parser.mly" + ( BinOp(BCompar BCeq, _1, _3) ) +# 673 "parser.ml" + : 'equality_expression)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'equality_expression) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'relational_expression) in + Obj.repr( +# 170 "parser.mly" + ( BinOp(BCompar BCne, _1, _3) ) +# 681 "parser.ml" + : 'equality_expression)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'equality_expression) in + Obj.repr( +# 175 "parser.mly" + ( _1 ) +# 688 "parser.ml" + : 'logical_AND_expression)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'logical_AND_expression) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'equality_expression) in + Obj.repr( +# 177 "parser.mly" + ( BinOp(BBool BBand, _1, _3) ) +# 696 "parser.ml" + : 'logical_AND_expression)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'logical_AND_expression) in + Obj.repr( +# 182 "parser.mly" + ( _1 ) +# 703 "parser.ml" + : 'logical_OR_expression)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'logical_OR_expression) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'logical_AND_expression) in + Obj.repr( +# 184 "parser.mly" + ( BinOp(BBool BBor, _1, _3) ) +# 711 "parser.ml" + : 'logical_OR_expression)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'logical_OR_expression) in + Obj.repr( +# 192 "parser.mly" + ( _1 ) +# 718 "parser.ml" + : 'expression)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'compound_statement) in + Obj.repr( +# 200 "parser.mly" + ( _1 ) +# 725 "parser.ml" + : 'statement)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'expression_statement) in + Obj.repr( +# 201 "parser.mly" + ( _1 ) +# 732 "parser.ml" + : 'statement)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'selection_statement) in + Obj.repr( +# 202 "parser.mly" + ( _1 ) +# 739 "parser.ml" + : 'statement)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'iteration_statement) in + Obj.repr( +# 203 "parser.mly" + ( _1 ) +# 746 "parser.ml" + : 'statement)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'jump_statement) in + Obj.repr( +# 204 "parser.mly" + ( _1 ) +# 753 "parser.ml" + : 'statement)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'block_item_list_opt) in + Obj.repr( +# 211 "parser.mly" + ( _2 ) +# 760 "parser.ml" + : 'compound_statement)) +; (fun __caml_parser_env -> + Obj.repr( +# 216 "parser.mly" + ( Skip) +# 766 "parser.ml" + : 'block_item_list_opt)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'block_item_list) in + Obj.repr( +# 218 "parser.mly" + ( _1 ) +# 773 "parser.ml" + : 'block_item_list_opt)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'block_item) in + Obj.repr( +# 223 "parser.mly" + ( _1 ) +# 780 "parser.ml" + : 'block_item_list)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 1 : 'block_item_list) in + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'block_item) in + Obj.repr( +# 225 "parser.mly" + ( Seq (_1, _2) ) +# 788 "parser.ml" + : 'block_item_list)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 1 : 'assignment) in + Obj.repr( +# 231 "parser.mly" + ( _1 ) +# 795 "parser.ml" + : 'expression_statement)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 1 : 'call_statement) in + Obj.repr( +# 232 "parser.mly" + ( _1 ) +# 802 "parser.ml" + : 'expression_statement)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 3 : string) in + let _3 = (Parsing.peek_val __caml_parser_env 1 : 'argument_expression_list_opt) in + Obj.repr( +# 237 "parser.mly" + ( CallC(_1, _3) ) +# 810 "parser.ml" + : 'call_statement)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : string) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'expression) in + Obj.repr( +# 245 "parser.mly" + ( Assign(_1, _3) ) +# 818 "parser.ml" + : 'assignment)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'statement) in + Obj.repr( +# 255 "parser.mly" + ( _1 ) +# 825 "parser.ml" + : 'block_item)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'expression) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'statement) in + Obj.repr( +# 261 "parser.mly" + ( CondC(_2, _3, Skip) ) +# 833 "parser.ml" + : 'selection_statement)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 3 : 'expression) in + let _3 = (Parsing.peek_val __caml_parser_env 2 : 'statement) in + let _5 = (Parsing.peek_val __caml_parser_env 0 : 'statement) in + Obj.repr( +# 263 "parser.mly" + ( CondC(_2, _3, _5) ) +# 842 "parser.ml" + : 'selection_statement)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'expression) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'statement) in + Obj.repr( +# 269 "parser.mly" + ( Loop(Seq(CondC(_2, Skip, Exit), _3)) ) +# 850 "parser.ml" + : 'iteration_statement)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'expression) in + Obj.repr( +# 274 "parser.mly" + ( Return _2 ) +# 857 "parser.ml" + : 'jump_statement)) +(* Entry start *) +; (fun __caml_parser_env -> raise (Parsing.YYexit (Parsing.peek_val __caml_parser_env 0))) +|] +let yytables = + { Parsing.actions=yyact; + Parsing.transl_const=yytransl_const; + Parsing.transl_block=yytransl_block; + Parsing.lhs=yylhs; + Parsing.len=yylen; + Parsing.defred=yydefred; + Parsing.dgoto=yydgoto; + Parsing.sindex=yysindex; + Parsing.rindex=yyrindex; + Parsing.gindex=yygindex; + Parsing.tablesize=yytablesize; + Parsing.table=yytable; + Parsing.check=yycheck; + Parsing.error_function=parse_error; + Parsing.names_const=yynames_const; + Parsing.names_block=yynames_block } +let start (lexfun : Lexing.lexbuf -> token) (lexbuf : Lexing.lexbuf) = + (Parsing.yyparse yytables 1 lexfun lexbuf : Lang.prog) diff --git a/Makefile b/src/Makefile similarity index 86% rename from Makefile rename to src/Makefile index 0870c84..5c4c317 100644 --- a/Makefile +++ b/src/Makefile @@ -1,4 +1,5 @@ -all: comp +# Import lib + compile + clean folder +all: lib comp clean # Compilation of Ocaml files # Attention: order of object files important @@ -50,5 +51,10 @@ parser.cmo: parser.ml parser.cmi lang.cmo .PHONY: clean -clean: +### Import files from /lib +lib: + cp ../lib/* ./ + +## Remove compiled modules and lib +clean: rm -f lexer.ml parser.ml *.mli *.cmi *.cmo diff --git a/comp.ml b/src/comp.ml similarity index 100% rename from comp.ml rename to src/comp.ml diff --git a/gen.ml b/src/gen.ml similarity index 100% rename from gen.ml rename to src/gen.ml diff --git a/instrs.ml b/src/instrs.ml similarity index 100% rename from instrs.ml rename to src/instrs.ml diff --git a/interf.ml b/src/interf.ml similarity index 100% rename from interf.ml rename to src/interf.ml diff --git a/lang.ml b/src/lang.ml similarity index 100% rename from lang.ml rename to src/lang.ml diff --git a/typing.ml b/src/typing.ml similarity index 77% rename from typing.ml rename to src/typing.ml index 2b1c8aa..af1e312 100644 --- a/typing.ml +++ b/src/typing.ml @@ -10,4 +10,4 @@ type environment = } -let tp_prog (Prog (fundecls, fundefns)) = true +let tp_prog (Prog (fundecls, fundefns)) = true \ No newline at end of file diff --git a/use.ml b/src/use.ml similarity index 99% rename from use.ml rename to src/use.ml index d673b5c..16880ca 100644 --- a/use.ml +++ b/src/use.ml @@ -1,4 +1,3 @@ - #load "lang.cmo";; #load "parser.cmo" ;; #load "lexer.cmo" ;; diff --git a/sujet.pdf b/sujet.pdf new file mode 100644 index 0000000..42a541e Binary files /dev/null and b/sujet.pdf differ