-type actions() :: list().
-type args() :: list() | '_'.
-type ast() :: tuple().
-type flags() :: list().
-type guard() :: tuple() | '_'.
-type m_f_a() :: {atom(), atom() | '_', integer() | '_'}.
-type tokens() :: [{atom(), integer(), term()} | {atom(), integer()}].
-type tp() :: {m_f_a(), [{args(), [guard()], actions()}], flags()}.
-spec compile(atom() | binary() | list()) -> tp().
-spec generate(ast()) -> tp().
-spec parse(string()) -> ast().
-spec scan(string()) -> tokens().