#include "hashtable.h" #ifndef PARSE #define PARSE typedef enum SymbolProvince { NO_PROVINCE, KEY_REF, LITERAL } prov_t; typedef enum LiteralType { NO_TYPE, INT, FLOAT, STRING } litType_t; typedef struct Symbol { prov_t province; litType_t litType; void* name; struct Symbol** args; int argCount; } sym_t; typedef struct SymbolSet { sym_t** symbols; int count; } symset_t; sym_t* init_sym(prov_t province, litType_t litType, void* name); sym_t* init_sym_key(char* value); sym_t* init_sym_int(int value); sym_t* init_sym_float(float value); sym_t* init_sym_str(char* value); void destroy_sym(sym_t* symbol); void destroy_sym_tree(sym_t* origin); int symtoi(sym_t* symbol); float symtof(sym_t* symbol); char* symtos(sym_t* symbol); void symbol_add_arg(sym_t* symbol, sym_t* arg); void symset_add_symbol(symset_t* symbolSet, sym_t* symbol); symset_t* parse_symbols(char** str, int* sLine); sym_t* parse_symbol_final(char* str); void write_symbol_visual(sym_t* symbol, int offset); #endif