#ifndef SYMBOL_H #define SYMBOL_H typedef unsigned int symbol; extern size_t total_symbols; extern char **symbol_to_str; extern int (*symbol_is_terminal)(symbol s); extern int (*symbol_is_input_end)(symbol s); extern int (*symbol_is_valid)(symbol s); // helper macro #define IMPLEMENT_FUNCPTR(type, name, args) \ type __##name args; \ type (*name) args = __##name; \ type __##name args #endif