v23i046: Flex, a fast lex replacement, Part10/10
Rich Salz
rsalz at bbn.com
Fri Oct 12 01:30:04 AEST 1990
Submitted-by: Vern Paxson <vern at cs.cornell.edu>
Posting-number: Volume 23, Issue 46
Archive-name: flex2.3/part10
#! /bin/sh
# This is a shell archive. Remove anything before this line, then feed it
# into a shell via "sh file" or similar. To overwrite existing files,
# type "sh file -c".
# The tool that generated this appeared in the comp.sources.unix newsgroup;
# send mail to comp-sources-unix at uunet.uu.net if you want that tool.
# Contents: MISC/Makefile.VMS Makefile ccl.c
# Wrapped by rsalz at litchi.bbn.com on Wed Oct 10 13:24:06 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
echo If this archive is complete, you will see the following message:
echo ' "shar: End of archive 10 (of 10)."'
if test -f 'MISC/Makefile.VMS' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'MISC/Makefile.VMS'\"
else
echo shar: Extracting \"'MISC/Makefile.VMS'\" \(3537 characters\)
sed "s/^X//" >'MISC/Makefile.VMS' <<'END_OF_FILE'
X############################ VMS MAKEFILE ##############################
X#IMPORTANT: Before you use this makefile fill in the contents of GNULIB.
X#
X# Define tools$$exe, tools$$library, and tools$$manual to reflect the
X# locations where you would like to store the executables, library (flex.skel)
X# and the manual pages. These names can be defined at the command line
X# prompt: eg.
X# $ define tools$$exe disk:[dir1.dir2.etc]
X#
X# Once these names have been defined the following commands
X# can be executed at the command line:
X#
X# $ mms install
X# $ mms test
X# $ mms clean
X#
X# When "mms test" is executed the diff should not show any differences. In fact
X# the same effect can be achieved by
X#
X# $ mms install, test, clean
X#
X# The filename of the the mms description file, i.e., this file,
X# should either be "makefile." or "decrip.mms"
X#
X# VMS make file for "flex" tool
X
X# Redefine the following for your own environment
XBIN = tools$$exe
XLIB = tools$$library
XMAN = tools$$manual
XGNULIB = <******directory where you keep alloca.obj and bcopy.obj***>
X
XSKELETON_FILE = "DEFAULT_SKELETON_FILE=""$(LIB):FLEX.SKEL"""
X
XCCFLAGS = VMS,USG
XFLEX_FLAGS = -is
X
XFLEXOBJS = ccl.obj dfa.obj ecs.obj gen.obj main.obj misc.obj nfa.obj -
X parse.obj scan.obj sym.obj tblcmp.obj yylex.obj
X
XOBJ = ccl.obj,dfa.obj,ecs.obj,gen.obj,main.obj,misc.obj,nfa.obj,parse.obj, -
X scan.obj,sym.obj,tblcmp.obj,yylex.obj
X
Xdefault : flex
X ! installed FLEX
X
Xinstall : lib man bin
X !Installed FLEX and LIBRARIES
X
Xlib : $(LIB):flex.skel
X ! Installed $(LIB):flex.skel
X
Xbin : $(BIN):flex.exe
X flex :== $ $(BIN):flex.exe
X
Xman : $(MAN):flex.doc
X ! installed $(MAN):flex.doc
X
X$(LIB):flex.skel : flex.skel
X copy flex.skel $(LIB):flex.skel
X$(BIN):flex.exe : flex.exe
X copy flex.exe $(BIN):flex.exe
X$(MAN):flex.doc : flex.1
X copy flex.1 $(MAN):flex.doc
X
Xflex : flex.exe
X copy flex.exe $(BIN):flex.exe
X
Xflex.exe : $(FLEXOBJS)
X link /exe=flex.exe -
X $(OBJ), -
X $(GNULIB)alloca.obj, -
X $(GNULIB)bcopy.obj
X
X
Xparse.c : parse.y
X bison/defines/verbose/fixed_outfiles parse.y
X copy y_tab.c parse.c
X del/noconfirm y_tab.c;*
X
Xparse.h : parse.c
X copy y_tab.h parse.h
X del/noconfirm y_tab.h;*
X
Xscan.c : initscan.c
X copy initscan.c scan.c
X
Xccl.obj : ccl.c flexdef.h
X cc /define=($(CCFLAGS)) ccl.c
Xdfa.obj : dfa.c flexdef.h
X cc /define=($(CCFLAGS)) dfa.c
Xecs.obj : ecs.c flexdef.h
X cc /define=($(CCFLAGS)) ecs.c
Xgen.obj : gen.c flexdef.h
X cc /define=($(CCFLAGS)) gen.c
Xmain.obj : main.c flexdef.h
X cc /define=($(CCFLAGS),$(SKELETON_FILE)) main.c
Xmisc.obj : misc.c flexdef.h
X cc /define=($(CCFLAGS)) misc.c
Xnfa.obj : nfa.c flexdef.h
X cc /define=($(CCFLAGS)) nfa.c
Xparse.obj : parse.c flexdef.h parse.h
X cc /define=($(CCFLAGS)) parse.c
Xscan.obj : scan.c parse.h flexdef.h
X cc /define=($(CCFLAGS)) scan.c
Xsym.obj : sym.c flexdef.h
X cc /define=($(CCFLAGS)) sym.c
Xtblcmp.obj : tblcmp.c flexdef.h
X cc /define=($(CCFLAGS)) tblcmp.c
Xyylex.obj : yylex.c parse.h flexdef.h
X cc /define=($(CCFLAGS)) yylex.c
X
Xclean :
X ! Cleaning up by deleting unnecessary object files etc.
X - delete/noconfirm scan.c;*
X - delete/noconfirm parse.c;*
X - delete/noconfirm parse.h;*
X - delete/noconfirm lexyy.c;*
X - delete/noconfirm *.obj;*
X - delete/noconfirm flex*.tmp;*
X - delete/noconfirm y.output;*
X - delete/noconfirm *.diff;*
X - delete/noconfirm y_tab.*;*
X - purge/log
X
Xtest : $(BIN):flex.exe
X flex :== $ $(BIN):flex.exe
X define tools$$library 'f$environment("default")'
X sho log tool$$library
X flex $(FLEX_FLAGS) scan.l
X diff/out=flex.diff initscan.c lexyy.c
X type/page flex.diff
END_OF_FILE
if test 3537 -ne `wc -c <'MISC/Makefile.VMS'`; then
echo shar: \"'MISC/Makefile.VMS'\" unpacked with wrong size!
fi
# end of 'MISC/Makefile.VMS'
fi
if test -f 'Makefile' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'Makefile'\"
else
echo shar: Extracting \"'Makefile'\" \(4876 characters\)
sed "s/^X//" >'Makefile' <<'END_OF_FILE'
X# make file for "flex" tool
X
X# @(#) $Header: /usr/fsys/odin/a/vern/flex/RCS/Makefile,v 2.9 90/05/26 17:28:44 vern Exp $ (LBL)
X
X# Porting considerations:
X#
X# For System V Unix machines, add -DUSG to CFLAGS (if it's not
X# automatically defined)
X# For Vax/VMS, add "-DVMS -DUSG" to CFLAGS.
X# For MS-DOS, add "-DMS_DOS -DUSG" to CFLAGS. Create \tmp if not present.
X# You will also want to rename flex.skel to something with a three
X# character extension, change SKELETON_FILE below appropriately,
X# See MSDOS.notes for more info.
X# For Amiga, add "-DAMIGA -DUSG" to CFLAGS.
X# For SCO Unix, add "-DSCO_UNIX" to CFLAGS.
X#
X# For C compilers which don't know about "void", add -Dvoid=int to CFLAGS.
X#
X# If your C compiler is ANSI standard but does not include the <stdlib.h>
X# header file (some installations of gcc have this problem), then add
X# -DDONT_HAVE_STDLIB_H to CFLAGS.
X#
X# By default, flex will be configured to generate 8-bit scanners only
X# if the -8 flag is given. If you want it to always generate 8-bit
X# scanners, add "-DDEFAULT_CSIZE=256" to CFLAGS. Note that doing
X# so will double the size of all uncompressed scanners.
X#
X# If on your system you have trouble building flex due to 8-bit
X# character problems, remove the -8 from FLEX_FLAGS and the
X# "#define FLEX_8_BIT_CHARS" from the beginning of flexdef.h.
X
X
X# the first time around use "make first_flex"
X
X
X# Installation targeting. Files will be installed under the tree rooted
X# at DESTDIR. User commands will be installed in BINDIR, library files
X# in LIBDIR (which will be created if necessary), auxiliary files in
X# AUXDIR, manual pages will be installed in MANDIR with extension MANEXT.
X# Raw, unformatted troff source will be installed if INSTALLMAN=man, nroff
X# preformatted versions will be installed if INSTALLMAN=cat.
XDESTDIR =
XBINDIR = /usr/local
XLIBDIR = /usr/local/lib
XAUXDIR = /usr/local/lib
XMANDIR = /usr/man/manl
XMANEXT = l
XINSTALLMAN = man
X
X# MAKE = make
X
X
XSKELETON_FILE = $(DESTDIR)$(AUXDIR)/flex.skel
XSKELFLAGS = -DDEFAULT_SKELETON_FILE=\"$(SKELETON_FILE)\"
XCFLAGS = -O
XLDFLAGS = -s
X
XCOMPRESSION =
XFLEX_FLAGS = -ist8 -Sflex.skel
X# which "flex" to use to generate scan.c from scan.l
XFLEX = ./flex
X# CC = cc
X
XAR = ar
XRANLIB = ranlib
X
XFLEXOBJS = \
X ccl.o \
X dfa.o \
X ecs.o \
X gen.o \
X main.o \
X misc.o \
X nfa.o \
X parse.o \
X scan.o \
X sym.o \
X tblcmp.o \
X yylex.o
X
XFLEX_C_SOURCES = \
X ccl.c \
X dfa.c \
X ecs.c \
X gen.c \
X main.c \
X misc.c \
X nfa.c \
X parse.c \
X scan.c \
X sym.c \
X tblcmp.c \
X yylex.c
X
XFLEX_LIB_OBJS = \
X libmain.o
X
XFLEXLIB = flexlib.a
X
X
Xall : flex $(FLEXLIB)
X
Xflex : $(FLEXOBJS)
X $(CC) $(CFLAGS) -o flex $(LDFLAGS) $(FLEXOBJS)
X
Xfirst_flex:
X cp initscan.c scan.c
X $(MAKE) $(MFLAGS) flex
X
Xparse.h parse.c : parse.y
X $(YACC) -d parse.y
X @mv y.tab.c parse.c
X @mv y.tab.h parse.h
X
Xscan.c : scan.l
X $(FLEX) $(FLEX_FLAGS) $(COMPRESSION) scan.l >scan.c
X
Xscan.o : scan.c parse.h flexdef.h
X
Xmain.o : main.c flexdef.h
X $(CC) $(CFLAGS) -c $(SKELFLAGS) main.c
X
Xccl.o : ccl.c flexdef.h
Xdfa.o : dfa.c flexdef.h
Xecs.o : ecs.c flexdef.h
Xgen.o : gen.c flexdef.h
Xmisc.o : misc.c flexdef.h
Xnfa.o : nfa.c flexdef.h
Xparse.o : parse.c flexdef.h
Xsym.o : sym.c flexdef.h
Xtblcmp.o : tblcmp.c flexdef.h
Xyylex.o : yylex.c flexdef.h
X
Xflex.man : flex.1
X nroff -man flex.1 >flex.man
X
X$(FLEXLIB) : $(FLEX_LIB_OBJS)
X $(AR) cru $(FLEXLIB) $(FLEX_LIB_OBJS)
X
Xlint : $(FLEX_C_SOURCES)
X lint $(FLEX_C_SOURCES) > flex.lint
X
Xdistrib :
X mv scan.c initscan.c
X chmod 444 initscan.c
X $(MAKE) $(MFLAGS) clean
X
Xinstall: flex $(DESTDIR)$(LIBDIR) flex.skel install.$(INSTALLMAN) install-lib
X install -s -m 755 flex $(DESTDIR)$(BINDIR)/flex
X install -c -m 644 flex.skel $(SKELETON_FILE)
X
Xinstall-lib: $(DESTDIR)$(LIBDIR) $(FLEXLIB)
X install -c -m 644 $(FLEXLIB) $(DESTDIR)$(LIBDIR)/libfl.a
X $(RANLIB) $(DESTDIR)$(LIBDIR)/libfl.a
X
X$(DESTDIR)$(LIBDIR):
X mkdir $@
X
Xinstall.man: flex.1 flexdoc.1
X install -c -m 644 flex.1 $(DESTDIR)$(MANDIR)/flex.$(MANEXT)
X install -c -m 644 flexdoc.1 $(DESTDIR)$(MANDIR)/flexdoc.$(MANEXT)
X
Xinstall.cat: flex.1 flexdoc.1
X nroff -h -man flex.1 > $(DESTDIR)$(MANDIR)/flex.$(MANEXT)
X nroff -h -man flexdoc.1 > $(DESTDIR)$(MANDIR)/flexdoc.$(MANEXT)
X chmod 644 $(DESTDIR)$(MANDIR)/flex.$(MANEXT)
X chmod 644 $(DESTDIR)$(MANDIR)/flexdoc.$(MANEXT)
X
Xclean :
X rm -f core errs flex *.o parse.c *.lint parse.h flex.man tags \
X $(FLEXLIB)
X
Xtags :
X ctags $(FLEX_C_SOURCES)
X
Xvms : flex.man
X $(MAKE) $(MFLAGS) distrib
X
Xtest : flex
X ./flex $(FLEX_FLAGS) $(COMPRESSION) scan.l | diff scan.c -
X
Xbigtest :
X rm -f scan.c ; $(MAKE) COMPRESSION="-C" test
X rm -f scan.c ; $(MAKE) COMPRESSION="-Ce" test
X rm -f scan.c ; $(MAKE) COMPRESSION="-Cm" test
X rm -f scan.c ; $(MAKE) COMPRESSION="-Cfe" test
X rm -f scan.c ; $(MAKE) COMPRESSION="-CFe" test
X rm -f scan.c ; $(MAKE) COMPRESSION="-Cf" test
X rm -f scan.c ; $(MAKE) COMPRESSION="-CF" test
X rm -f scan.c ; $(MAKE)
END_OF_FILE
if test 4876 -ne `wc -c <'Makefile'`; then
echo shar: \"'Makefile'\" unpacked with wrong size!
fi
# end of 'Makefile'
fi
if test -f 'ccl.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'ccl.c'\"
else
echo shar: Extracting \"'ccl.c'\" \(4115 characters\)
sed "s/^X//" >'ccl.c' <<'END_OF_FILE'
X/* ccl - routines for character classes */
X
X/*-
X * Copyright (c) 1990 The Regents of the University of California.
X * All rights reserved.
X *
X * This code is derived from software contributed to Berkeley by
X * Vern Paxson.
X *
X * The United States Government has rights in this work pursuant
X * to contract no. DE-AC03-76SF00098 between the United States
X * Department of Energy and the University of California.
X *
X * Redistribution and use in source and binary forms are permitted provided
X * that: (1) source distributions retain this entire copyright notice and
X * comment, and (2) distributions including binaries display the following
X * acknowledgement: ``This product includes software developed by the
X * University of California, Berkeley and its contributors'' in the
X * documentation or other materials provided with the distribution and in
X * all advertising materials mentioning features or use of this software.
X * Neither the name of the University nor the names of its contributors may
X * be used to endorse or promote products derived from this software without
X * specific prior written permission.
X * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
X * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
X * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
X */
X
X#ifndef lint
Xstatic char rcsid[] =
X "@(#) $Header: /usr/fsys/odin/a/vern/flex/RCS/ccl.c,v 2.5 90/06/27 23:48:13 vern Exp $ (LBL)";
X#endif
X
X#include "flexdef.h"
X
X/* ccladd - add a single character to a ccl
X *
X * synopsis
X * int cclp;
X * int ch;
X * ccladd( cclp, ch );
X */
X
Xvoid ccladd( cclp, ch )
Xint cclp;
Xint ch;
X
X {
X int ind, len, newpos, i;
X
X len = ccllen[cclp];
X ind = cclmap[cclp];
X
X /* check to see if the character is already in the ccl */
X
X for ( i = 0; i < len; ++i )
X if ( ccltbl[ind + i] == ch )
X return;
X
X newpos = ind + len;
X
X if ( newpos >= current_max_ccl_tbl_size )
X {
X current_max_ccl_tbl_size += MAX_CCL_TBL_SIZE_INCREMENT;
X
X ++num_reallocs;
X
X ccltbl = reallocate_character_array( ccltbl, current_max_ccl_tbl_size );
X }
X
X ccllen[cclp] = len + 1;
X ccltbl[newpos] = ch;
X }
X
X
X/* cclinit - make an empty ccl
X *
X * synopsis
X * int cclinit();
X * new_ccl = cclinit();
X */
X
Xint cclinit()
X
X {
X if ( ++lastccl >= current_maxccls )
X {
X current_maxccls += MAX_CCLS_INCREMENT;
X
X ++num_reallocs;
X
X cclmap = reallocate_integer_array( cclmap, current_maxccls );
X ccllen = reallocate_integer_array( ccllen, current_maxccls );
X cclng = reallocate_integer_array( cclng, current_maxccls );
X }
X
X if ( lastccl == 1 )
X /* we're making the first ccl */
X cclmap[lastccl] = 0;
X
X else
X /* the new pointer is just past the end of the last ccl. Since
X * the cclmap points to the \first/ character of a ccl, adding the
X * length of the ccl to the cclmap pointer will produce a cursor
X * to the first free space
X */
X cclmap[lastccl] = cclmap[lastccl - 1] + ccllen[lastccl - 1];
X
X ccllen[lastccl] = 0;
X cclng[lastccl] = 0; /* ccl's start out life un-negated */
X
X return ( lastccl );
X }
X
X
X/* cclnegate - negate a ccl
X *
X * synopsis
X * int cclp;
X * cclnegate( ccl );
X */
X
Xvoid cclnegate( cclp )
Xint cclp;
X
X {
X cclng[cclp] = 1;
X }
X
X
X/* list_character_set - list the members of a set of characters in CCL form
X *
X * synopsis
X * int cset[CSIZE];
X * FILE *file;
X * list_character_set( cset );
X *
X * writes to the given file a character-class representation of those
X * characters present in the given set. A character is present if it
X * has a non-zero value in the set array.
X */
X
Xvoid list_character_set( file, cset )
XFILE *file;
Xint cset[];
X
X {
X register int i;
X char *readable_form();
X
X putc( '[', file );
X
X for ( i = 0; i < csize; ++i )
X {
X if ( cset[i] )
X {
X register int start_char = i;
X
X putc( ' ', file );
X
X fputs( readable_form( i ), file );
X
X while ( ++i < csize && cset[i] )
X ;
X
X if ( i - 1 > start_char )
X /* this was a run */
X fprintf( file, "-%s", readable_form( i - 1 ) );
X
X putc( ' ', file );
X }
X }
X
X putc( ']', file );
X }
END_OF_FILE
if test 4115 -ne `wc -c <'ccl.c'`; then
echo shar: \"'ccl.c'\" unpacked with wrong size!
fi
# end of 'ccl.c'
fi
echo shar: End of archive 10 \(of 10\).
cp /dev/null ark10isdone
MISSING=""
for I in 1 2 3 4 5 6 7 8 9 10 ; do
if test ! -f ark${I}isdone ; then
MISSING="${MISSING} ${I}"
fi
done
if test "${MISSING}" = "" ; then
echo You have unpacked all 10 archives.
rm -f ark[1-9]isdone ark[1-9][0-9]isdone
else
echo You still must unpack the following archives:
echo " " ${MISSING}
fi
exit 0
exit 0 # Just in case...
--
Please send comp.sources.unix-related mail to rsalz at uunet.uu.net.
Use a domain-based address or give alternate paths, or you may lose out.
More information about the Comp.sources.unix
mailing list