ifndef _%{guard_name}_H define _%{guard_name}_H

% if define_stype? typedef union {

%{union_body}

} %{stype}; % end

enum %{prefix}tokentype { % starting = 257

%{token_prefix}EOF = 0,

% grammar.terminals.each_with_index do |terminal, i|

%{token_prefix}%{terminal.name} = %{starting + i},

% end };

typedef struct {

struct %{prefix}stack_element* elements;
unsigned int current;
unsigned int max;
unsigned char free;

} %{prefix}pstate;

define %{upper_prefix}PUSH_MORE -1 define %{upper_prefix}TERMINALS %{grammar.terminals.size} define %{upper_prefix}STATES %{table.size}

const char* %{prefix}token_string(%{terminal_type} token); int %{prefix}lex(%{stype}* lval%{lex_params}); int %{prefix}parse_push(%{parse_params}); int %{prefix}parse_pull(%{parse_params}); %{prefix}pstate* %{prefix}pstate_new(); void %{prefix}pstate_delete(%{prefix}pstate* stack);

endif