#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 __VA_ARGS__ \ type (*name) args = __##name; #endif