%{ #include #include #include #define TRUE 1 #define FALSE 0 char arg = 'a'; char procname[256] = {0}; char defprocname[256] = {0}; char tempname[256]; char returntype[256] = {0}; char typename[256] = {0}; char callconv[256] = {0}; int i; int firstarg = TRUE; int fStartProc = FALSE; int fVoidReturn = FALSE; int nrargs = 0; FILE *file = NULL; %} %token NAME %token ENDOFPROC %token BRACKETOPEN %token BRACKETCLOSE %token COMMA %token POINTER %token PPOINTER %token CONST %token VOID %token BEGINPROC %token ENDPROC %token STAT_IFDEF %token STAT_IFNDEF %token STAT_ENDIF %token STAT_INCLUDE %token STAT_DEFINE %token STAT_UNDEF %token STAT_INLINE %token STRUCT %% lines : line | lines line ; line : IFDEFSTATEMENT | ENDIFSTATEMENT | INCLUDESTATEMENT | DEFINESTATEMENT | PROCEDUREDEF ; //PROCEDUREDEF : RET PROCNAME BRACKETOPEN ARGUMENTS BRACKETCLOSE ENDOFPROC PROCEDUREDEF : RET CALLCONV PROCNAME BRACKETOPEN ARGUMENTS BRACKETCLOSE ENDOFPROC { fprintf(file, " push fs\n"); fprintf(file, " mov eax, 0150bh\n"); fprintf(file, " mov fs, eax\n"); for(i=0;i