Internal bits used by the generated automaton, not part of the public API

`module Public : sig ... end`
`module Error : sig ... end`
`type context````=`

`|` `Sexp_comment`
`|` `Sexp`

``
`val context : (_, _) Public.state ‑> context`
`val set_automaton_state : ('u, 's) Public.state ‑> int ‑> unit`
`val advance : ('u, 's) Public.state ‑> unit`

Advance the position counters. `advance_eol` is for when we read a newline character.

`val advance_eol : ('u, 's) Public.state ‑> unit`
`val block_comment_depth : ('u, 's) Public.state ‑> int`

Number of opened #|

`type ('u, 's) action``= ('u, 's) Public.state ‑> char ‑> 's ‑> 's```
`type ('u, 's) epsilon_action``= ('u, 's) Public.state ‑> 's ‑> 's```
`val add_atom_char : (_, _) action`

Add a character to the atom buffer. `add_quoted_atom_char` does the same for quoted atoms

`val add_quoted_atom_char : (_, _) action`
`val add_escaped : (_, _) action`

Add a character that just follows a '\\' and the '\\' itself if necessary.

`val add_dec_escape_char : (_, _) action`

`escaped_value <- escaped_value * 10 + (char - '0')`

These functions make the assumption that `char` is between '0' and '9'. `add_dec_escape_char` also assumes the result doesn't overflow. The automaton definition must make sure this is the case.

`add_last_dec_escape_char` also adds the resulting character to the atom buffer.

`val add_last_dec_escape_char : (_, _) action`
`val comment_add_last_dec_escape_char : (_, _) action`

Same but for quoted strings inside comments. Useful because it can fail.

`val add_hex_escape_char : (_, _) action`

Same as `add_dec_escape_char` but for hexadicemal escape sequences

`val add_last_hex_escape_char : (_, _) action`
`val start_sexp_comment : (_, _) action`

Ignore one more full sexp to come

`val add_first_char : (_, _) action`

Add the first char of an unquoted atom.

`val start_quoted_string : (_, _) action`
`val add_token_char : (_, _) action`

Takes note of a control character in quoted atoms or the uninterpreted characters of comments, for which there is no corresponding `add_*` call (a backslash and the x in "\xff" or any character in a line comment). This does not get called for the opening (`start_quoted_string`) or closing (`push_quoted_atom`) quotes themselves.

`val opening : (_, _) action`
`val closing : (_, _) action`
`val push_quoted_atom : (_, _) action`
`val start_block_comment : (_, _) action`
`val end_block_comment : (_, _) action`
`val start_line_comment : (_, _) action`
`val end_line_comment : (_, _) epsilon_action`
`val eps_push_atom : (_, _) epsilon_action`
`val eps_add_first_char_hash : (_, _) epsilon_action`
`val eps_eoi_check : (_, _) epsilon_action`
`val eps_add_escaped_cr : (_, _) epsilon_action`