Received: from 128.140.1.1 by ee.lbl.gov for (8.6.9/1.43r) id HAA01193; Thu, 29 Sep 1994 07:26:54 -0700 Received: from larry-le0.cc.emory.edu by emoryu1.cc.emory.edu (5.65/Emory_cc.4.0.1) via SMTP id AA07292 ; Thu, 29 Sep 94 10:26:41 -0400 From: tkane01@unix.cc.emory.edu (Terrence O Kane) Received: by larry.cc.emory.edu (5.0) id AA11757; Thu, 29 Sep 1994 10:26:43 +0500 Message-Id: <9409291426.AA11757@larry.cc.emory.edu> Subject: patches and makefile for Borland C 4.02, flex 2.4.7 To: vern@ee.lbl.gov Date: Thu, 29 Sep 1994 10:26:42 -0400 (EDT) X-Mailer: ELM [version 2.4 PL23] Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Content-Length: 9900 Enclosed are unified diffs and a makefile for Borland 4.02 The changes in the enclosed are 1) make the size parameters for memory allocation "size_t", 2) change an include file when the lexer is compiled within 'extern "C" {...}' in a C++ file, and 3) include pragmas in the header suitable for BCC 4.02 to hush on warnings. The latter is done because of the limit on command line size. A tradeoff exists between putting pragmas in the header, or #defines in the header - I put in the pragmas since they're suppoed to be ignored unless understood - *and* they're enclosed in BCC specific ifdefs, anyway. All changes are enclosed in "#ifdef __BORLANDC__". --- misc.c Tue Jan 04 14:33:10 1994 +++ ../misc.c Wed Sep 28 18:44:32 1994 @@ -55,15 +55,19 @@ action_index += len; } /* allocate_array - allocate memory for an integer array of the given size */ void *allocate_array( size, element_size ) +#ifndef __BORLANDC__ int size, element_size; +#else /* __BORLANDC__ */ +size_t size, element_size; +#endif /* __BORLANDC__ */ { register void *mem; /* On 16-bit int machines (e.g., 80286) we might be trying to * allocate more than a signed int can hold, and that won't * work. Cheap test: */ @@ -634,15 +638,19 @@ } /* reallocate_array - increase the size of a dynamic array */ void *reallocate_array( array, size, element_size ) void *array; +#ifndef __BORLANDC__ int size, element_size; +#else /* __BORLANDC__ */ +size_t size, element_size; +#endif /* __BORLANDC__ */ { register void *new_array; /* Same worry as in allocate_array(): */ if ( size * element_size <= 0 ) flexfatal( "attempt to increase array size by less than 1 byte" ); @@ -739,15 +747,19 @@ } /* The following is only needed when building flex's parser using certain * broken versions of bison. */ void *yy_flex_xmalloc( size ) +#ifndef __BORLANDC__ int size; +#else /* __BORLANDC__ */ +size_t size; +#endif /* __BORLANDC__ */ { void *result = flex_alloc( size ); if ( ! result ) flexfatal( "memory allocation failed in yy_flex_xmalloc()" ); return result; --- skel.c Wed Aug 03 11:38:32 1994 +++ ../skel.c Wed Sep 28 18:50:58 1994 @@ -26,15 +26,19 @@ "", "#ifdef __cplusplus", "", "#include ", "%+", "class istream;", "%*", + "#ifndef __BORLANDC__", "#include ", + "#else /* __BORLANDC__ */", + "#include ", + "#endif /* __BORLANDC__ */", "", "/* Use prototypes in function declarations. */", "#define YY_USE_PROTOS", "", "/* The \"const\" storage-class-modifier is valid. */", "#define YY_USE_CONST", "", @@ -240,16 +244,21 @@ "static int yy_start_stack_depth = 0;", "static int *yy_start_stack = 0;", "static void yy_push_state YY_PROTO(( int new_state ));", "static void yy_pop_state YY_PROTO(( void ));", "static int yy_top_state YY_PROTO(( void ));", "%*", "", + "#ifndef __BORLANDC__", "static void *yy_flex_alloc YY_PROTO(( unsigned int ));", "static void *yy_flex_realloc YY_PROTO(( void *, unsigned int ));", + "#else /* __BORLANDC__ */", + "static void *yy_flex_alloc YY_PROTO(( size_t ));", + "static void *yy_flex_realloc YY_PROTO(( void *, size_t ));", + "#endif /* __BORLANDC__ */", "static void yy_flex_free YY_PROTO(( void * ));", "", "#define yy_new_buffer yy_create_buffer", "", "%% yytext/yyin/yyout/yy_state_type/yylineno etc. def's & init go here", "", "#ifndef yytext_ptr", --- initscan.c Wed Aug 03 11:42:46 1994 +++ ../initscan.c Wed Sep 28 18:51:34 1994 @@ -16,15 +16,19 @@ #endif #endif #ifdef __cplusplus #include +#ifndef __BORLANDC__ #include +#else /* __BORLANDC__ */ +#include +#endif /* __BORLANDC__ */ /* Use prototypes in function declarations. */ #define YY_USE_PROTOS /* The "const" storage-class-modifier is valid. */ #define YY_USE_CONST @@ -220,16 +224,21 @@ static int yy_start_stack_ptr = 0; static int yy_start_stack_depth = 0; static int *yy_start_stack = 0; static void yy_push_state YY_PROTO(( int new_state )); static void yy_pop_state YY_PROTO(( void )); static int yy_top_state YY_PROTO(( void )); +#ifndef __BORLANDC__ static void *yy_flex_alloc YY_PROTO(( unsigned int )); static void *yy_flex_realloc YY_PROTO(( void *, unsigned int )); +#else /* __BORLANDC__ */ +static void *yy_flex_alloc YY_PROTO(( size_t )); +static void *yy_flex_realloc YY_PROTO(( void *, size_t )); +#endif /* __BORLANDC__ */ static void yy_flex_free YY_PROTO(( void * )); #define yy_new_buffer yy_create_buffer #define INITIAL 0 #define SECT2 1 #define SECT2PROLOG 2 --- flexdef.h Tue Jan 04 14:33:14 1994 +++ ../flexdef.h Wed Sep 28 18:53:44 1994 @@ -27,14 +27,25 @@ */ /* @(#) $Header: flexdef.h,v 1.2 94/01/04 14:33:14 vern Exp $ (LBL) */ #include #include +#ifdef __BORLANDC__ +#include + +#pragma warn -pro +#pragma warn -rch +#pragma warn -use +#pragma warn -aus +#pragma warn -par +#pragma warn -pia + +#endif /* __BORLANDC__ */ #if HAVE_STRING_H #include #else #include #endif #if __STDC__ @@ -607,19 +618,29 @@ */ extern char nmstr[MAXLINE]; extern int sectnum, nummt, hshcol, dfaeql, numeps, eps2, num_reallocs; extern int tmpuses, totnst, peakpairs, numuniq, numdup, hshsave; extern int num_backing_up, bol_needed; +#ifndef __BORLANDC__ void *allocate_array PROTO((int, int)); void *reallocate_array PROTO((void*, int, int)); +#else /* __BORLANDC__ */ +void *allocate_array PROTO((size_t, size_t)); +void *reallocate_array PROTO((void*, size_t, size_t)); +#endif /* __BORLANDC__ */ +#ifndef __BORLANDC__ void *flex_alloc PROTO((unsigned int)); void *flex_realloc PROTO((void*, unsigned int)); +#else /* __BORLANDC__ */ +void *flex_alloc PROTO((size_t)); +void *flex_realloc PROTO((void*, size_t)); +#endif /* __BORLANDC__ */ void flex_free PROTO((void*)); #define allocate_integer_array(size) \ (int *) allocate_array( size, sizeof( int ) ) #define reallocate_integer_array(array,size) \ (int *) reallocate_array( (void *) array, size, sizeof( int ) ) @@ -772,15 +793,19 @@ /* Write out one section of the skeleton file. */ extern void skelout PROTO((void)); /* Output a yy_trans_info structure. */ extern void transition_struct_out PROTO((int, int)); /* Only needed when using certain broken versions of bison to build parse.c. */ +#ifndef __BORLANDC__ extern void *yy_flex_xmalloc PROTO(( int )); +#else /* __BORLANDC__ */ +extern void *yy_flex_xmalloc PROTO(( size_t )); +#endif /* __BORLANDC__ */ /* Set a region of memory to 0. */ extern void zero_out PROTO((char *, int)); /* from file nfa.c */ ############################################################################### # Makefile for flex 2.4.7 with Borland C/C++ version 4.02 # # This will probably need to be adjusted for your existing lexer/parser # generators. See definitions for FLEX and YACC near the bottom of the # makefile. # # Copy initscan.c to scan.c to make your first executable. After that, # you may choose to try alternate compression options for your everyday # flex executable. # # This will build flex with the large model. Don't use huge, but if you # feel like experimenting with other models, post your success stories to # comp.compilers, OK? # # This makefile does *not* implement the big testing found in "makefile.in". # # I also assume the availability of sed and the gnu file utilities on the # system - they're readily available, so if you don't have them, why not? # # # The resulting generated lexer (the real goal, right?) will compile # (and run nicely, too) as a .c file, as well as being included such as # extern "C" { #include "lexyyc" } in a .cplusplus file. # ############################################################################### DEBUG = 1 .autodepend all: flex.exe ############################################################################### # # standard utilitities? ha. # CC = bcc CPP = bcc ############################################################################### # MODEL = l !if $(DEBUG) == 1 !message Building with debug. debugCompile = -v debugLink = /v !else !message Building without debug. debugCompile = debugLink = !endif LOADER = c0$(MODEL).obj LIBS = c$(MODEL).lib LINKFLAGS = $(debugLink) DATASEG = -dc -Ff SizeOPT = -Os -G- Defines = -DSHORT_FILE_NAMES=1 -DHAVE_STRING_H=1 COMMON = -A -c -m$(MODEL) $(SizeOPT) $(DATASEG) $(Defines) $(debugCompile) CFLAGS = -o$@ $(COMMON) CCFLAGS = -o$@ $(COMMON) -Pcc ############################################################################### .SUFFIXES: .cc .cc.obj: $(CPP) $(CCFLAGS) $< .c.obj: $(CPP) $(CFLAGS) $< ############################################################################### # # source & object files # SRC = ccl.c dfa.c ecs.c gen.c main.c misc.c nfa.c parse.c \ scan.c sym.c tblcmp.c yylex.c skel.c OBJS = $(SRC:.c=.obj) objects: $(OBJS) @echo $(OBJS) ############################################################################### # # Executable # flex.exe: $(OBJS) tlink $(LINKFLAGS) @&&! $(LOADER) $** $&.exe $&.map $(LIBS) ! # ############################################################################### # # Lex files # FLEX = .\flex FLEX_FLAGS = -ist scan.c: scan.l $(FLEX) $(FLEX_FLAGS) scan.l >scan.tmp sed s,\"$(srcdir)/scan.l\",\"scan.l\", scan.c @rm scan.tmp ############################################################################### # # YACC files # YACC = .\bison YFLAGS = -vdyl parse.c: parse.y $(YACC) -ydl parse.y @sed "/extern char.*malloc/d" parse.c @rm -f y_tab.c @mv y_tab.h parse.h # # end Makefile # ###############################################################################