#define arrayof "array" #define ptrto "pointer" #define func "function" #define structof "struct" #define removeWhiteSpaces(ss) while(isspace(*(ss))) (ss)++ #define removeAorAn(ss) if (*(ss) == 'a' && (ss)[1] == 'n') {\ (ss) += 2; removeWhiteSpaces(ss);\ } else if (*(ss) == 'a' && (ss)[1] == ' ') {\ (ss)++; removeWhiteSpaces((ss));\ } enum modifier { ModPlain, ModPtr, ModArray, ModFunc, ModStruct, ModEnum, ModEnd, }; static const char *modstring[] = {"Plain Type", "Pointer", "Array", "Function", "Struct", "Enum", "End", }; struct arr { int size; }; struct stc { char thetype[20]; }; struct fnc { struct syms *args; struct syms *ret; }; struct syms { enum modifier modifier; union { char typeplain[10]; struct fnc fnc; struct arr arrval; struct stc stcval; }; }; char* isFunc(char *s); char* isArray(char *s); char* isStruct(char *s); char* isPtr(char *s); char* var(char *s, char*, int); char* isType(char *s, char*, int); enum modifier parse(char **s, struct syms*); char* fetchFunc(char *s, struct syms*); char* fetchArray(char *s, struct syms*); char* fetchStruct(char *s, struct syms*); char* fetchPtr(char *s, struct syms*); void checkSyms(struct syms *thesym); void freesyms(struct syms *thesym); void freefnc(struct fnc fnc); char* translate(struct syms[], int, char*, char*[], int);