(* Generated by re2ocaml *)
#1 "codegen/ocaml/01_basic_s.re"
(* re2ocaml $INPUT -o $OUTPUT -s *)

type state = {
    str: string;
    mutable cur: int;
}


#12 "codegen/ocaml/01_basic_s.ml"
let rec yy0 (st : state) : bool =
    let yych = st.str.[st.cur] in
    st.cur <- st.cur + 1;
    if (yych <= '0') then (yy1 [@tailcall]) st
    else if (yych <= '9') then (yy2 [@tailcall]) st
    else (yy1 [@tailcall]) st

and yy1 (st : state) : bool =
#18 "codegen/ocaml/01_basic_s.re"
    false
#23 "codegen/ocaml/01_basic_s.ml"

and yy2 (st : state) : bool =
    let yych = st.str.[st.cur] in
    if (yych <= '/') then (
        (yy3 [@tailcall]) st
    ) else if (yych <= '9') then (
        st.cur <- st.cur + 1;
        (yy2 [@tailcall]) st
    ) else (
        (yy3 [@tailcall]) st
    )

and yy3 (st : state) : bool =
#17 "codegen/ocaml/01_basic_s.re"
    true
#39 "codegen/ocaml/01_basic_s.ml"

and lex (st : state) : bool =
    (yy0 [@tailcall]) st

#19 "codegen/ocaml/01_basic_s.re"


let main () =
    let st = {str = "1234\x00"; cur = 0}
    in if not (lex st) then raise (Failure "error")

let _ = main ()
