amiga-request@abcfd20.larc.nasa.gov (Amiga Sources/Binaries Moderator) (08/20/90)
Submitted-by: loftus@wpllabs.uucp (William P Loftus) Posting-number: Volume 90, Issue 228 Archive-name: unix/flex-2.3/part01 [ the flexdoc.doc file was uuencoded to preserve formatting, and it and flexdoc.1 were split ...tad ] [ from the flexdoc file... ] flex is a tool for generating scanners: programs which recognized lexical patterns in text. flex reads the given input files, or its standard input if no file names are given, for a description of a scanner to generate. The description is in the form of pairs of regular expressions and C code, called rules. flex generates as output a C source file, lex.yy.c, which defines a routine yylex(). This file is compiled and linked with the -lfl library to produce an executable. When the executable is run, it analyzes its input for occurrences of the regular expressions. Whenever it finds one, it executes the corresponding C code. #!/bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh <file", e.g.. If this archive is complete, you # will see the following message at the end: # "End of archive 1 (of 13)." # Contents: Amiga.notes COPYING MISC MISC/MSDOS.notes # MISC/Makefile.VMS MISC/README MISC/Turbo-C.notes Makefile # Makefile.amiga README ccl.c ecs.c flexdoc.uu.ac libmain.c parse.h # sym.c yylex.c # Wrapped by tadguy@abcfd20 on Sun Aug 19 18:41:41 1990 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'Amiga.notes' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'Amiga.notes'\" else echo shar: Extracting \"'Amiga.notes'\" \(1144 characters\) sed "s/^X//" >'Amiga.notes' <<'END_OF_FILE' X(1) Makefile modifications X X o Removed Unix depended commands and conventions X X o Made Makefile bison specific (isn't there a bison option to make it act like X yacc, i.e., generate y.tab.c instead of parse.tab.c?) X X o Amiga Makefile is called "Makefile.amiga" X X(2) flexdef.h modifications (because of makefile problem) X X o Cannot get quotes to work correctly with AmigaDOS and LMK. X moved this define to flexdef.h (between ifdef AMIGA...endif) wpl 7/14/90 X X Affected makefile line: X #SKELFLAGS = -dDEFAULT_SKELETON_FILE="$(SKELETON_FILE)" X X(3) parse.y X X o Added following prototypes: X X void build_eof_action(); X void yyerror( char * ); X X(4) scan.l X X o Added case "return ( (int) yytext[0] )" X X(5) flex.skel X X o Added keyword "register" to following prototypes: X X static yy_state_type yy_try_NUL_trans X YY_PROTO(( register yy_state_type current_state )); X X static void yyunput YY_PROTO(( YY_CHAR c, X register YY_CHAR *buf_ptr )); X X(6) main.c X X o changed mktemp call to a call to TmpFileName and added TmpFileName X routine. X X char * X TmpFileName(template) X END_OF_FILE if test 1144 -ne `wc -c <'Amiga.notes'`; then echo shar: \"'Amiga.notes'\" unpacked with wrong size! fi # end of 'Amiga.notes' fi if test -f 'COPYING' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'COPYING'\" else echo shar: Extracting \"'COPYING'\" \(1802 characters\) sed "s/^X//" >'COPYING' <<'END_OF_FILE' XFlex carries the copyright used for BSD software, slightly modified Xbecause it originated at the Lawrence Berkeley (not Livermore!) Laboratory, Xwhich operates under a contract with the Department of Energy: 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 X provided that: (1) source distributions retain this entire X copyright notice and comment, and (2) distributions including X binaries display the following acknowledgement: ``This product X includes software developed by the University of California, X Berkeley and its contributors'' in the documentation or other X materials provided with the distribution and in all advertising X materials mentioning features or use of this software. Neither the X name of the University nor the names of its contributors may be X used to endorse or promote products derived from this software X without specific prior written permission. X X THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR X IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED X WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR X PURPOSE. X XThis basically says "do whatever you please with this software except Xremove this notice or take advantage of the University's (or the flex Xauthors') name". X XNote that the "flex.skel" scanner skeleton carries no copyright notice. XYou are free to do whatever you please with scanners generated using flex; Xfor them, you are not even bound by the above copyright. END_OF_FILE if test 1802 -ne `wc -c <'COPYING'`; then echo shar: \"'COPYING'\" unpacked with wrong size! fi # end of 'COPYING' fi if test ! -d 'MISC' ; then echo shar: Creating directory \"'MISC'\" mkdir 'MISC' fi if test -f 'MISC/MSDOS.notes' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'MISC/MSDOS.notes'\" else echo shar: Extracting \"'MISC/MSDOS.notes'\" \(5328 characters\) sed "s/^X//" >'MISC/MSDOS.notes' <<'END_OF_FILE' X$Header:$ X XNotes on Porting flex to MS-DOS X------------------------------- X X[These notes were last revised 30Dec89 for flex release 2.2.] X XPrevious releases of flex have been successfully built using Microsoft C and Xthe following options: /AL, /stack:10000, -LARGE, -Ml, -Mt128, -DSYS_V X XOther folks report that the following work for MSC 5.1 under DOS and OS/2: X X CFLAGS=-ALu -F 8000 -Gt16000 -Ox -DMS_DOS -DSYS_V -D__RUNTIME_YYMAXDEPTH X LINKFLAGS=/E /FAR /PAC /NOI X XWhere you may want to adjust -F up in order to increase available stack Xsize (though it may not be necessary) and you may want to increase -Gt Xto some number that puts just enought of the big data items in their own Xdata segments. (The default for -Gt is items of 32k. This is too high for Xflex.) __RUNTIME_YYMAXDEPTH is useful if you have a parse.c that's Xbeen generated by a yacc that understands how to do this; otherwise, it's a Xno-op. X XJeffrey R. Jones (jjones@angate.att.com) writes [this has been edited -vp]: X X.... The port was accomplished with: X X AT&T 6312 WGS (12 Mhz AT class machine) X Microsoft C compiler Version 5.0 X 'make' utility from Aztec-C package (subset of unix-make) X XThe re-done makefile is included .... Do what you wish with it. X X X[note that this Makefile is now slightly out of date and has not been X tested with flex 2.2] X X# This makefile is used to port the flex 2.1 build to a PC. The compiler is X# Microsoft-C Version 5.0 while the 'make' utility came with Aztec-C, which X# is VERY compatible with Unix's make. There are a few things that Aztec-C's X# 'make' can't do that unix does so I have made a few minor changes. X# At the least you can manually compile each file and then link. X# The linker and library utilities are alos Microsoft's. X# X# Additionally, after building with the large model, the flex.map reveals that X# code-size is less than 64K, therefore, in favor of a little more execution X# efficiency, I built with the compact model. I've used the default compiler X# optimization (no /O switches). X# X# The linker must be told to increase the run-time stack space. The default X# stack space is 2048. Flexing scan.l with the default stack-space results in X# a run-time stack overflow, hence the stack was increase to 4096. X# X# NOTE: I have MKS-Toolkit's yacc and was able to use it with virtually no X# modifications to anything. If you don't have yacc for a PC, you can try X# yaccing on a unix system and downloading the resulting files to the PC. X# X# Jeffrey R. Jones X# jjones@angate!att.com X X X# make file for "flex" tool X X# @(#) $Header: Makefile,v 2.3 89/06/20 17:27:12 vern Exp $ (LBL) X X# Porting considerations: X# X# For System V Unix machines, add -DSYS_V to CFLAGS. X# For Vax/VMS, add -DSYS_V to CFLAGS. X# For MS-DOS, add "-DMS_DOS -DSYS_V" 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# For Amiga, add "-DAMIGA -DSYS_V" to CFLAGS. X X X# the first time around use "make first_flex" X X XYACC=yacc XSKELETON_DIR = c:/usr/contrib/lib XSKELETON_FILE = flex.ske XSKELFLAGS = -DDEFAULT_SKELETON_FILE=\"$(SKELETON_DIR)/$(SKELETON_FILE)\" XCFLAGS = -c -AC -DMS_DOS -DSYS_V XLDFLAGS = /noi /cp:1 /stack:4096 X X#this null definition prevents a returned error code XMFLAGS = X XFLEX_FLAGS = XFLEX = flex XCC = cl X X# redefine Aztec make's built-in rule X.c.obj: X $(CC) $(CFLAGS) $*.c X X# break obj-list into two because of 128 character command-line limit of X# Microsoft's link and lib utilities. XFLEXOBJS1 = ccl.obj dfa.obj ecs.obj gen.obj main.obj misc.obj nfa.obj parse.obj XFLEXOBJS2 = scan.obj sym.obj tblcmp.obj yylex.obj 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 X# lib is used to get around the 128 character command-line limit of 'link'. Xflex.exe : $(FLEXOBJS1) $(FLEXOBJS2) X lib tmplib $(FLEXOBJS1); X link $(LDFLAGS) $(FLEXOBJS2),$*.exe,,tmplib; X rm -f tmplib.lib X X# the second 'make flex.exe' causes scan.l to be RE-flexed. The resulting X# scan.c is different from initscan.c in that \r\n are added instead of X# just \n. Since \r\n is DOS language and this is targetted for PCs, and X# since I don't know what would happen for all cases in DOS-land, I went X# ahead and did it. Xfirst_flex: X cp initscan.c scan.c X make $(MFLAGS) flex.exe X rm -f scan.c X make flex.exe X Xparse.obj: parse.c parse.h X Xparse.h parse.c : parse.y X $(YACC) -d parse.y X @mv ytab.c parse.c X @mv ytab.h parse.h X Xscan.c : scan.l X $(FLEX) -ist $(FLEX_FLAGS) scan.l > scan.c X Xscan.obj : scan.c parse.h X Xmain.obj : main.c X $(CC) $(CFLAGS) $(SKELFLAGS) main.c X X################### X#don't have, or need, anything else except maybe the 'test' rule. X# X# don't have nroff X#flex.man : flex.1 X# nroff -man flex.1 >flex.man X# X# don't have lint X#lint : $(FLEX_C_SOURCES) X# lint $(FLEX_C_SOURCES) > flex.lint X# X#distrib : X# mv scan.c initscan.c X# chmod 444 initscan.c X# $(MAKE) $(MFLAGS) clean X# X#clean : X# rm -f core errs flex *.o parse.c *.lint parse.h flex.man tags X# X#tags : X# ctags $(FLEX_C_SOURCES) X# X#vms : flex.man X# $(MAKE) $(MFLAGS) distrib X# X# break this up into multiple lines...Aztec 'make' limitation Xtest : X $(FLEX) -ist $(FLEX_FLAGS) scan.l > scan.tst X diff scan.c scan.tst X rm -f scan.tst END_OF_FILE if test 5328 -ne `wc -c <'MISC/MSDOS.notes'`; then echo shar: \"'MISC/MSDOS.notes'\" unpacked with wrong size! fi # end of 'MISC/MSDOS.notes' fi 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 'MISC/README' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'MISC/README'\" else echo shar: Extracting \"'MISC/README'\" \(520 characters\) sed "s/^X//" >'MISC/README' <<'END_OF_FILE' XMiscellaneous flex stuff. In here you'll find: X X - a VMS makefile for flex X X - out-of-date patches for flex on the Atari and for Minix, X from Ronald Lamprecht (V61%DHDURZ1.BITNET@CUNYVM.CUNY.EDU, X ...!unido!DHDURZ1.bitnet!V61, V61@DHDURZ1 (Bitnet)); X X - somewhat out-of-date notes on porting flex to MS-DOS, from X Jeffrey R. Jones (jjones@angate.att.com); X X - notes on porting flex to Turbo-C, from Frank Whaley (few@quad1.quad.com, X uunet!ccicpg!quad1!few). X XUpdated versions of these will be welcome! END_OF_FILE if test 520 -ne `wc -c <'MISC/README'`; then echo shar: \"'MISC/README'\" unpacked with wrong size! fi # end of 'MISC/README' fi if test -f 'MISC/Turbo-C.notes' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'MISC/Turbo-C.notes'\" else echo shar: Extracting \"'MISC/Turbo-C.notes'\" \(6089 characters\) sed "s/^X//" >'MISC/Turbo-C.notes' <<'END_OF_FILE' X(Message inbox:25) XDate: Tue, 29 Aug 89 18:57:48 pst XFrom: few@quad1.quad.com (Frank Whaley) XSubject: Re: flex 2.1 for Turbo C XTo: vern@cs.cornell.edu X X> Sorry it's taken me so long to get back to you - I've been out of touch X> for about the last month. X XI didn't expect to hear from you soon -- hope your journey was nice. X X> I'd like to have your 'adjustments' for Turbo C, so if you still have X> them lying conveniently around, please mail them to me. Thanks. X XAfter a little more fiddling, the changes are relatively small. Probably Xthe largest problem is that Turbo C does not yet claim to adhere to the Xdraft standard, so even though they support many "modern" constructs, they Xstill are not __STDC__. Thus the diffs from flex.skl (note the name): X X 62c62 X < #if defined(__STDC__) || defined(__TURBOC__) X --- X > #ifdef __STDC__ X 104c104 X < #if !(defined(__STDC__) || defined(__TURBOC__)) X --- X > #ifndef __STDC__ X 134c134 X < #if defined(__STDC__) || defined(__TURBOC__) X --- X > #ifdef __STDC__ X 390c390 X < #if defined(__STDC__) || defined(__TURBOC__) X --- X > #ifdef __STDC__ X 482c482 X < #if defined(__STDC__) || defined(__TURBOC__) X --- X > #ifdef __STDC__ X Xand initscan.c: X X 63c63 X < #if defined(__STDC__) || defined(__TURBOC__) X --- X > #ifdef __STDC__ X 105c105 X < #if !(defined(__STDC__) || defined(__TURBOC__)) X --- X > #ifndef __STDC__ X 677c677 X < #if defined(__STDC__) || defined(__TURBOC__) X --- X > #ifdef __STDC__ X 1658c1658 X < #if defined(__STDC__) || defined(__TURBOC__) X --- X > #ifdef __STDC__ X 1750c1750 X < #if defined(__STDC__) || defined(__TURBOC__) X --- X > #ifdef __STDC__ X Xare pretty simple. BTW, simply adding -D__STDC__=1 to CFLAGS works, but X__STDC__ is used in many Turbo C header files, and can confuse things. XIt would also mean that all flex-generated code must be compiled with Xthat flag. X Xflexdef.h also had one small problem: X X 44,46c44 X < #ifndef MS_DOS X < char *memset(); /* should be declared in string.h */ X < #endif X --- X > char *memset(); X Xas the Turbo C definiton of memset() is: X void *memset(void *s, int c, size_t n); X XThe 128-byte command line limit of MS-DOS prevents us from using tcc to Xlink the objects together, so I provide a tlink script, flex.lnk: X----- X\turboc\lib\c0l+ Xccl+ Xdfa+ Xecs+ Xgen+ Xmain+ Xmisc+ Xnfa+ Xparse+ Xscan+ Xsym+ Xtblcmp+ Xyylex Xflex.exe X X\turboc\lib\cl X----- X XThe blank line is required. X XThe makefile needed a lot of hacking, so here it is in its entirety. XI don't think it is completely finished, but I'll be happy to work on Xit more if you'd like. Some of the changes are specific to my environment X(my yacc outputs ytab.c and ytab.h) and most MS-DOS people won't have Xcp, mv and rm. Some people like separate makefiles for different Xsystems, but we like one makefile with obscene parameterization. X XI should note that all of my experiments with FLEX_FLAGS=-{c,f,F,e} Xhave failed, mostly due to scan.c becoming too large to be a single Xmodule. Damn toy operating system. X----- X# make file for "flex" tool X X# @(#) $Header: Makefile,v 2.3 89/06/20 17:27:12 vern Exp $ (LBL) X X# Porting considerations: X# X# For BSD machines: X# CFLAGS = X# LDFLAGS = -s X# LINK = $(CC) $(CFLAGS) -o flex $(LDFLAGS) $(FLEXOBJS) X# SKELETON_DIR = . X# SKELETON_FILE = flex.skel X# SKELFLAGS = -DDEFAULT_SKELETON_FILE=\"$(SKELETON_DIR)/$(SKELETON_FILE)\" X# O = o X# YTAB = y.tab X# FLEX = ./flex X# X# For System V Unix or Vax/VMS machines, merely add: X# CFLAGS = -DSYS_V X# X# For MS-DOS, Turbo C: XCC = tcc XCFLAGS = -DSYS_V -DMS_DOS -O -G -Z -ml -v XLINK = tlink @flex.lnk/c/x/v XSKELETON_DIR = . XSKELETON_FILE = flex.skl XSKELFLAGS = -DDEFAULT_SKELETON_FILE="$(SKELETON_DIR)/$(SKELETON_FILE)" XO = obj XEXE = .exe XYTAB = ytab XFLEX = flex X X# X# the first time around use "make first_flex" X# X XFLEX_FLAGS = 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$(EXE): $(FLEXOBJS) X $(LINK) X Xfirst_flex: X cp initscan.c scan.c X $(MAKE) flex$(EXE) X Xparse.h parse.c: parse.y X $(YACC) -d parse.y X @mv $(YTAB).c parse.c X @mv $(YTAB).h parse.h X Xscan.c: scan.l X $(FLEX) -ist $(FLEX_FLAGS) scan.l >scan.c X Xscan.$O: scan.c parse.h X Xmain.$O: main.c X $(CC) $(CFLAGS) -c $(SKELFLAGS) main.c X Xflex.man: flex.1 X nroff -man flex.1 >flex.man 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) clean X Xclean: X rm -f core errs flex *.$O parse.c *.lint parse.h flex.man tags X Xtags: X ctags $(FLEX_C_SOURCES) X Xvms: flex.man X $(MAKE) distrib X Xtest: X $(FLEX) -ist $(FLEX_FLAGS) scan.l | diff scan.c - X----- X XBTW, thanks for a great tool. X XFrank Whaley XSenior Development Engineer XQuadratron Systems Incorporated Xfew@quad1.quad.com Xuunet!ccicpg!quad1!few X(Message inbox:8) XDate: Thu, 31 Aug 89 14:57:36 pst XFrom: few@quad1.quad.com (Frank Whaley) XSubject: Re: flex 2.1 for Turbo C XTo: vern@cs.cornell.edu X X> Thanks for the diffs and Makefile. I'll endeavor to integrate them X> into the next release. X XOne terribly important thing I forgot -- Turbo C (and most MS-DOS C Xcompilers) provide only a 4K default stack. Not having thoroughly Xtested flex, I can't say that this is enough. The makefile I provided Xto you builds a version without stack checking code. I would suggest Xadding "-N" to CFLAGS, which will include some simple stack overflow Xchecking code. You may wish to include the following lines to main.c: X X #ifdef __TURBOC__ X unsigned _stklen = 16384; /* some reasonably large number */ X #endif X XIn addition, the flags in the makefile build a version with symbols Xfor Turbo Debugger (like -g). You may wan't to leave these flags off X(remove "-v" from CFLAGS and "/v" from LINK) or you may wish to provide Xan "install" target like so: X X BINDIR = {/usr/local/bin | c:\bin} X STRIP = {strip | tdstrip} X X install: flex$(EXE) X $(CP) flex$(EXE) $(BINDIR) X $(STRIP) $(BINDIR)/flex$(EXE) X XRegards, X few X Xfew@quad1.quad.com Xuunet!ccicpg!quad1!few X END_OF_FILE if test 6089 -ne `wc -c <'MISC/Turbo-C.notes'`; then echo shar: \"'MISC/Turbo-C.notes'\" unpacked with wrong size! fi # end of 'MISC/Turbo-C.notes' 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 'Makefile.amiga' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'Makefile.amiga'\" else echo shar: Extracting \"'Makefile.amiga'\" \(4524 characters\) sed "s/^X//" >'Makefile.amiga' <<'END_OF_FILE' X# make file for "flex" tool (modified to work with Lattice 5.05) 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 = c:unix XLIBDIR = s: XAUXDIR = s: XMANDIR = uuman: XMANEXT = doc XINSTALLMAN = man X X# MAKE = make X X XSKELETON_FILE = $(DESTDIR)$(AUXDIR)flex.skel X# Cannot get quotes to work correctly with AmigaDOS and LMK. X# moved this define to flexdef.h (between ifdef AMIGA...endif) wpl 7/14/90 X#SKELFLAGS = -dDEFAULT_SKELETON_FILE="$(SKELETON_FILE)" XSKELFLAGS = XCFLAGS = -O -cwus -dAMIGA -dUSG 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 XYACC = bison XMAKE = lmk XMFLAGS = -f Makefile.amiga 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 Xall : flex X Xflex : $(FLEXOBJS) X blink from lib:c.o $(FLEXOBJS) to flex lib lib:lc.lib lib:amiga.lib X Xfirst_flex: X copy initscan.c scan.c X $(MAKE) $(MFLAGS) flex X Xparse.h parse.c : parse.y X $(YACC) -d parse.y X @copy parse.tab.c parse.c X @copy parse.tab.h parse.h X @delete parse.tab.c X @delete parse.tab.h X Xscan.c : scan.l X $(FLEX) >scan.c $(FLEX_FLAGS) $(COMPRESSION) scan.l X Xscan.o : scan.c parse.h flexdef.h X Xmain.o : main.c flexdef.h X $(CC) $(CFLAGS) $(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 Xinstall : flex flex.skel X copy flex $(DESTDIR)$(BINDIR)/flex X copy flex.skel $(SKELETON_FILE) X X#install.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 X#install.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 X#clean : X# rm -f core errs flex *.o parse.c *.lint parse.h flex.man tags \ X# $(FLEXLIB) X X#test : flex X# ./flex $(FLEX_FLAGS) $(COMPRESSION) scan.l | diff scan.c - X X#bigtest : 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 4524 -ne `wc -c <'Makefile.amiga'`; then echo shar: \"'Makefile.amiga'\" unpacked with wrong size! fi # end of 'Makefile.amiga' fi if test -f 'README' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'README'\" else echo shar: Extracting \"'README'\" \(1599 characters\) sed "s/^X//" >'README' <<'END_OF_FILE' X// $Header: /usr/fsys/odin/a/vern/flex/RCS/README,v 2.8 90/05/26 17:31:27 vern Exp $ X XThis is release 2.3 of flex - a full release. X XThe flex distribution consists of the following files: X X README This message X X Makefile X flexdef.h X parse.y X scan.l X ccl.c X dfa.c X ecs.c flex sources X gen.c X main.c X misc.c X nfa.c X sym.c X tblcmp.c X yylex.c X X libmain.c flex library (-lfl) source X X initscan.c pre-flex'd version of scan.l X X flex.skel skeleton for generated scanners X X flexdoc.1 full user documentation X flex.1 reference documentation X X Changes Differences between this release and the previous one X X COPYING flex's copyright X X MISC/ a directory containing miscellaneous porting-related X notes (for Atari, MS-DOS, Turbo-C, and VMS) X X XDecide where you want to keep flex.skel (suggestion: /usr/local/lib), Xbut don't move it there yet. Edit "Makefile" and change the definition Xof SKELETON_FILE to reflect the full pathname of flex.skel. X XRead the "Porting considerations" note in the Makefile and make Xthe necessary changes. X XTo make flex for the first time, use: X X make first_flex X Xwhich uses the pre-generated copy of the flex scanner (the scanner Xitself is written using flex). X XAssuming it builds successfully, you can test it using X X make test X XThe "diff" should not show any differences. X XIf you're feeling adventurous, issue "make bigtest" and be prepared Xto wait a while. X XInstall flex using: X X make install X X XPlease send problems and feedback to: X X vern@cs.cornell.edu X decvax!cornell!vern X X Vern Paxson X CS Department X 4126 Upson Hall X Cornell University X Ithaca, NY 14853-7501 END_OF_FILE if test 1599 -ne `wc -c <'README'`; then echo shar: \"'README'\" unpacked with wrong size! fi # end of 'README' 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 if test -f 'ecs.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'ecs.c'\" else echo shar: Extracting \"'ecs.c'\" \(8758 characters\) sed "s/^X//" >'ecs.c' <<'END_OF_FILE' X/* ecs - equivalence class routines */ 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/ecs.c,v 2.5 90/06/27 23:48:17 vern Exp $ (LBL)"; X#endif X X#include "flexdef.h" X X/* ccl2ecl - convert character classes to set of equivalence classes X * X * synopsis X * ccl2ecl(); X */ X Xvoid ccl2ecl() X X { X int i, ich, newlen, cclp, ccls, cclmec; X X for ( i = 1; i <= lastccl; ++i ) X { X /* we loop through each character class, and for each character X * in the class, add the character's equivalence class to the X * new "character" class we are creating. Thus when we are all X * done, character classes will really consist of collections X * of equivalence classes X */ X X newlen = 0; X cclp = cclmap[i]; X X for ( ccls = 0; ccls < ccllen[i]; ++ccls ) X { X ich = ccltbl[cclp + ccls]; X cclmec = ecgroup[ich]; X X if ( xlation && cclmec < 0 ) X { X /* special hack--if we're doing %t tables then it's X * possible that no representative of this character's X * equivalence class is in the ccl. So waiting till X * we see the representative would be disastrous. Instead, X * we add this character's equivalence class anyway, if it's X * not already present. X */ X int j; X X /* this loop makes this whole process n^2; but we don't X * really care about %t performance anyway X */ X for ( j = 0; j < newlen; ++j ) X if ( ccltbl[cclp + j] == -cclmec ) X break; X X if ( j >= newlen ) X { /* no representative yet, add this one in */ X ccltbl[cclp + newlen] = -cclmec; X ++newlen; X } X } X X else if ( cclmec > 0 ) X { X ccltbl[cclp + newlen] = cclmec; X ++newlen; X } X } X X ccllen[i] = newlen; X } X } X X X/* cre8ecs - associate equivalence class numbers with class members X * X * synopsis X * int cre8ecs(); X * number of classes = cre8ecs( fwd, bck, num ); X * X * fwd is the forward linked-list of equivalence class members. bck X * is the backward linked-list, and num is the number of class members. X * X * Returned is the number of classes. X */ X Xint cre8ecs( fwd, bck, num ) Xint fwd[], bck[], num; X X { X int i, j, numcl; X X numcl = 0; X X /* create equivalence class numbers. From now on, abs( bck(x) ) X * is the equivalence class number for object x. If bck(x) X * is positive, then x is the representative of its equivalence X * class. X */ X for ( i = 1; i <= num; ++i ) X if ( bck[i] == NIL ) X { X bck[i] = ++numcl; X for ( j = fwd[i]; j != NIL; j = fwd[j] ) X bck[j] = -numcl; X } X X return ( numcl ); X } X X X/* ecs_from_xlation - associate equivalence class numbers using %t table X * X * synopsis X * numecs = ecs_from_xlation( ecmap ); X * X * Upon return, ecmap will map each character code to its equivalence X * class. The mapping will be positive if the character is the representative X * of its class, negative otherwise. X * X * Returns the number of equivalence classes used. X */ X Xint ecs_from_xlation( ecmap ) Xint ecmap[]; X X { X int i; X int nul_is_alone = false; X int did_default_xlation_class = false; X X if ( xlation[0] != 0 ) X { X /* if NUL shares its translation with other characters, choose one X * of the other characters as the representative for the equivalence X * class. This allows a cheap test later to see whether we can X * do away with NUL's equivalence class. X */ X for ( i = 1; i < csize; ++i ) X if ( xlation[i] == -xlation[0] ) X { X xlation[i] = xlation[0]; X ecmap[0] = -xlation[0]; X break; X } X X if ( i >= csize ) X /* didn't find a companion character--remember this fact */ X nul_is_alone = true; X } X X for ( i = 1; i < csize; ++i ) X if ( xlation[i] == 0 ) X { X if ( did_default_xlation_class ) X ecmap[i] = -num_xlations; X X else X { X /* make an equivalence class for those characters not X * specified in the %t table X */ X ++num_xlations; X ecmap[i] = num_xlations; X did_default_xlation_class = true; X } X } X X else X ecmap[i] = xlation[i]; X X if ( nul_is_alone ) X /* force NUL's equivalence class to be the last one */ X { X ++num_xlations; X ecmap[0] = num_xlations; X X /* there's actually a bug here: if someone is fanatic enough to X * put every character in its own translation class, then right X * now we just promoted NUL's equivalence class to be csize + 1; X * we can handle NUL's class number being == csize (by instead X * putting it in its own table), but we can't handle some *other* X * character having to be put in its own table, too. So in X * this case we bail out. X */ X if ( num_xlations > csize ) X flexfatal( "too many %t classes!" ); X } X X return num_xlations; X } X X X/* mkeccl - update equivalence classes based on character class xtions X * X * synopsis X * Char ccls[]; X * int lenccl, fwd[llsiz], bck[llsiz], llsiz, NUL_mapping; X * mkeccl( ccls, lenccl, fwd, bck, llsiz, NUL_mapping ); X * X * where ccls contains the elements of the character class, lenccl is the X * number of elements in the ccl, fwd is the forward link-list of equivalent X * characters, bck is the backward link-list, and llsiz size of the link-list X * X * NUL_mapping is the value which NUL (0) should be mapped to. X */ X Xvoid mkeccl( ccls, lenccl, fwd, bck, llsiz, NUL_mapping ) XChar ccls[]; Xint lenccl, fwd[], bck[], llsiz, NUL_mapping; X X { X int cclp, oldec, newec; X int cclm, i, j; X static unsigned char cclflags[CSIZE]; /* initialized to all '\0' */ X X /* note that it doesn't matter whether or not the character class is X * negated. The same results will be obtained in either case. X */ X X cclp = 0; X X while ( cclp < lenccl ) X { X cclm = ccls[cclp]; X X if ( NUL_mapping && cclm == 0 ) X cclm = NUL_mapping; X X oldec = bck[cclm]; X newec = cclm; X X j = cclp + 1; X X for ( i = fwd[cclm]; i != NIL && i <= llsiz; i = fwd[i] ) X { /* look for the symbol in the character class */ X for ( ; j < lenccl; ++j ) X { X register int ccl_char; X X if ( NUL_mapping && ccls[j] == 0 ) X ccl_char = NUL_mapping; X else X ccl_char = ccls[j]; X X if ( ccl_char > i ) X break; X X if ( ccl_char == i && ! cclflags[j] ) X { X /* we found an old companion of cclm in the ccl. X * link it into the new equivalence class and flag it as X * having been processed X */ X X bck[i] = newec; X fwd[newec] = i; X newec = i; X cclflags[j] = 1; /* set flag so we don't reprocess */ X X /* get next equivalence class member */ X /* continue 2 */ X goto next_pt; X } X } X X /* symbol isn't in character class. Put it in the old equivalence X * class X */ X X bck[i] = oldec; X X if ( oldec != NIL ) X fwd[oldec] = i; X X oldec = i; Xnext_pt: X ; X } X X if ( bck[cclm] != NIL || oldec != bck[cclm] ) X { X bck[cclm] = NIL; X fwd[oldec] = NIL; X } X X fwd[newec] = NIL; X X /* find next ccl member to process */ X X for ( ++cclp; cclflags[cclp] && cclp < lenccl; ++cclp ) X { X /* reset "doesn't need processing" flag */ X cclflags[cclp] = 0; X } X } X } X X X/* mkechar - create equivalence class for single character X * X * synopsis X * int tch, fwd[], bck[]; X * mkechar( tch, fwd, bck ); X */ X Xvoid mkechar( tch, fwd, bck ) Xint tch, fwd[], bck[]; X X { X /* if until now the character has been a proper subset of X * an equivalence class, break it away to create a new ec X */ X X if ( fwd[tch] != NIL ) X bck[fwd[tch]] = bck[tch]; X X if ( bck[tch] != NIL ) X fwd[bck[tch]] = fwd[tch]; X X fwd[tch] = NIL; X bck[tch] = NIL; X } END_OF_FILE if test 8758 -ne `wc -c <'ecs.c'`; then echo shar: \"'ecs.c'\" unpacked with wrong size! fi # end of 'ecs.c' fi if test -f 'flexdoc.uu.ac' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'flexdoc.uu.ac'\" else echo shar: Extracting \"'flexdoc.uu.ac'\" \(813 characters\) sed "s/^X//" >'flexdoc.uu.ac' <<'END_OF_FILE' XM($]V92!%=V5R;&ED("AE=V5R;&ED0&UI>F%R+D1O0U,N554N4T4I+@H*("`@M XM("!4:&ES('=O<FL@=V%S('!R:6UA<FEL>2!D;VYE('=H96X@22!W87,@(&%T@ XM("!T:&4@(%)E86P@(%1I;64*("`@("!3>7-T96US("!'<F]U<"!A="!T:&4@Y XM3&%W<F5N8V4@0F5R:V5L97D@3&%B;W)A=&]R>2!I;B!"97)K92T*("`@("!L& XM97DL($-!+B`@36%N>2`@=&AA;FMS("!T;R`@86QL("!T:&5R92`@9F]R("!TI XM:&4@('-U<'!O<G0@($D*("`@("!R96-E:79E9"X*"B`@("`@4V5N9"!C;VUM< XM96YT<R!T;SH*"B`@("`@("`@("!697)N(%!A>'-O;@H@("`@("`@("`@0V]MH XM<'5T97(@4V-I96YC92!$97!A<G1M96YT"B`@("`@("`@("`T,3(V(%5P<V]N* XM($AA;&P*("`@("`@("`@($-O<FYE;&P@56YI=F5R<VET>0H@("`@("`@("`@F XM271H86-A+"!.62`Q-#@U,RTW-3`Q"@H@("`@("`@("`@=F5R;D!C<RYC;W)NA XM96QL+F5D=0H@("`@("`@("`@9&5C=F%X(6-O<FYE;&PA=F5R;@H*"@H*"@H*J XM"@H*5F5R<VEO;B`R+C,@("`@("`@("!,87-T(&-H86YG93H@,C8@36%Y(#$Y$ X;.3`@("`@("`@("`@("`@("`@("`@,S4*"@H*9 X`` Xend Xsize 81522 END_OF_FILE if test 813 -ne `wc -c <'flexdoc.uu.ac'`; then echo shar: \"'flexdoc.uu.ac'\" unpacked with wrong size! fi # end of 'flexdoc.uu.ac' fi if test -f 'libmain.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'libmain.c'\" else echo shar: Extracting \"'libmain.c'\" \(256 characters\) sed "s/^X//" >'libmain.c' <<'END_OF_FILE' X/* libmain - flex run-time support library "main" function */ X X/* $Header: /usr/fsys/odin/a/vern/flex/RCS/libmain.c,v 1.2 90/05/26 16:50:08 vern Exp $ */ X Xextern int yylex(); X Xint main( argc, argv ) Xint argc; Xchar *argv[]; X X { X return yylex(); X } END_OF_FILE if test 256 -ne `wc -c <'libmain.c'`; then echo shar: \"'libmain.c'\" unpacked with wrong size! fi # end of 'libmain.c' fi if test -f 'parse.h' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'parse.h'\" else echo shar: Extracting \"'parse.h'\" \(527 characters\) sed "s/^X//" >'parse.h' <<'END_OF_FILE' X X#ifndef YYLTYPE Xtypedef X struct yyltype X { X int timestamp; X int first_line; X int first_column; X int last_line; X int last_column; X char *text; X } X yyltype; X X#define YYLTYPE yyltype X#endif X X#define YYACCEPT return(0) X#define YYABORT return(1) X#define YYERROR goto yyerrlab X#ifndef YYSTYPE X#define YYSTYPE int X#endif X#define CHAR 258 X#define NUMBER 259 X#define SECTEND 260 X#define SCDECL 261 X#define XSCDECL 262 X#define WHITESPACE 263 X#define NAME 264 X#define PREVCCL 265 X#define EOF_OP 266 X END_OF_FILE if test 527 -ne `wc -c <'parse.h'`; then echo shar: \"'parse.h'\" unpacked with wrong size! fi # end of 'parse.h' fi if test -f 'sym.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'sym.c'\" else echo shar: Extracting \"'sym.c'\" \(7527 characters\) sed "s/^X//" >'sym.c' <<'END_OF_FILE' X/* sym - symbol table routines */ 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/sym.c,v 2.4 90/06/27 23:48:36 vern Exp $ (LBL)"; X#endif X X#include "flexdef.h" X X X/* declare functions that have forward references */ X Xint hashfunct PROTO((register char[], int)); X X Xstruct hash_entry *ndtbl[NAME_TABLE_HASH_SIZE]; Xstruct hash_entry *sctbl[START_COND_HASH_SIZE]; Xstruct hash_entry *ccltab[CCL_HASH_SIZE]; X Xstruct hash_entry *findsym(); X X X/* addsym - add symbol and definitions to symbol table X * X * synopsis X * char sym[], *str_def; X * int int_def; X * hash_table table; X * int table_size; X * 0 / -1 = addsym( sym, def, int_def, table, table_size ); X * X * -1 is returned if the symbol already exists, and the change not made. X */ X Xint addsym( sym, str_def, int_def, table, table_size ) Xregister char sym[]; Xchar *str_def; Xint int_def; Xhash_table table; Xint table_size; X X { X int hash_val = hashfunct( sym, table_size ); X register struct hash_entry *sym_entry = table[hash_val]; X register struct hash_entry *new_entry; X register struct hash_entry *successor; X X while ( sym_entry ) X { X if ( ! strcmp( sym, sym_entry->name ) ) X { /* entry already exists */ X return ( -1 ); X } X X sym_entry = sym_entry->next; X } X X /* create new entry */ X new_entry = (struct hash_entry *) malloc( sizeof( struct hash_entry ) ); X X if ( new_entry == NULL ) X flexfatal( "symbol table memory allocation failed" ); X X if ( (successor = table[hash_val]) ) X { X new_entry->next = successor; X successor->prev = new_entry; X } X else X new_entry->next = NULL; X X new_entry->prev = NULL; X new_entry->name = sym; X new_entry->str_val = str_def; X new_entry->int_val = int_def; X X table[hash_val] = new_entry; X X return ( 0 ); X } X X X/* cclinstal - save the text of a character class X * X * synopsis X * Char ccltxt[]; X * int cclnum; X * cclinstal( ccltxt, cclnum ); X */ X Xvoid cclinstal( ccltxt, cclnum ) XChar ccltxt[]; Xint cclnum; X X { X /* we don't bother checking the return status because we are not called X * unless the symbol is new X */ X Char *copy_unsigned_string(); X X (void) addsym( (char *) copy_unsigned_string( ccltxt ), (char *) 0, cclnum, X ccltab, CCL_HASH_SIZE ); X } X X X/* ccllookup - lookup the number associated with character class text X * X * synopsis X * Char ccltxt[]; X * int ccllookup, cclval; X * cclval/0 = ccllookup( ccltxt ); X */ X Xint ccllookup( ccltxt ) XChar ccltxt[]; X X { X return ( findsym( (char *) ccltxt, ccltab, CCL_HASH_SIZE )->int_val ); X } X X X/* findsym - find symbol in symbol table X * X * synopsis X * char sym[]; X * hash_table table; X * int table_size; X * struct hash_entry *sym_entry, *findsym(); X * sym_entry = findsym( sym, table, table_size ); X */ X Xstruct hash_entry *findsym( sym, table, table_size ) Xregister char sym[]; Xhash_table table; Xint table_size; X X { X register struct hash_entry *sym_entry = table[hashfunct( sym, table_size )]; X static struct hash_entry empty_entry = X { X (struct hash_entry *) 0, (struct hash_entry *) 0, NULL, NULL, 0, X } ; X X while ( sym_entry ) X { X if ( ! strcmp( sym, sym_entry->name ) ) X return ( sym_entry ); X sym_entry = sym_entry->next; X } X X return ( &empty_entry ); X } X X X/* hashfunct - compute the hash value for "str" and hash size "hash_size" X * X * synopsis X * char str[]; X * int hash_size, hash_val; X * hash_val = hashfunct( str, hash_size ); X */ X Xint hashfunct( str, hash_size ) Xregister char str[]; Xint hash_size; X X { X register int hashval; X register int locstr; X X hashval = 0; X locstr = 0; X X while ( str[locstr] ) X hashval = ((hashval << 1) + str[locstr++]) % hash_size; X X return ( hashval ); X } X X X/* ndinstal - install a name definition X * X * synopsis X * char nd[]; X * Char def[]; X * ndinstal( nd, def ); X */ X Xvoid ndinstal( nd, def ) Xchar nd[]; XChar def[]; X X { X char *copy_string(); X Char *copy_unsigned_string(); X X if ( addsym( copy_string( nd ), (char *) copy_unsigned_string( def ), 0, X ndtbl, NAME_TABLE_HASH_SIZE ) ) X synerr( "name defined twice" ); X } X X X/* ndlookup - lookup a name definition X * X * synopsis X * char nd[], *def; X * char *ndlookup(); X * def/NULL = ndlookup( nd ); X */ X XChar *ndlookup( nd ) Xchar nd[]; X X { X return ( (Char *) findsym( nd, ndtbl, NAME_TABLE_HASH_SIZE )->str_val ); X } X X X/* scinstal - make a start condition X * X * synopsis X * char str[]; X * int xcluflg; X * scinstal( str, xcluflg ); X * X * NOTE X * the start condition is Exclusive if xcluflg is true X */ X Xvoid scinstal( str, xcluflg ) Xchar str[]; Xint xcluflg; X X { X char *copy_string(); X X /* bit of a hack. We know how the default start-condition is X * declared, and don't put out a define for it, because it X * would come out as "#define 0 1" X */ X /* actually, this is no longer the case. The default start-condition X * is now called "INITIAL". But we keep the following for the sake X * of future robustness. X */ X X if ( strcmp( str, "0" ) ) X printf( "#define %s %d\n", str, lastsc ); X X if ( ++lastsc >= current_max_scs ) X { X current_max_scs += MAX_SCS_INCREMENT; X X ++num_reallocs; X X scset = reallocate_integer_array( scset, current_max_scs ); X scbol = reallocate_integer_array( scbol, current_max_scs ); X scxclu = reallocate_integer_array( scxclu, current_max_scs ); X sceof = reallocate_integer_array( sceof, current_max_scs ); X scname = reallocate_char_ptr_array( scname, current_max_scs ); X actvsc = reallocate_integer_array( actvsc, current_max_scs ); X } X X scname[lastsc] = copy_string( str ); X X if ( addsym( scname[lastsc], (char *) 0, lastsc, X sctbl, START_COND_HASH_SIZE ) ) X format_pinpoint_message( "start condition %s declared twice", str ); X X scset[lastsc] = mkstate( SYM_EPSILON ); X scbol[lastsc] = mkstate( SYM_EPSILON ); X scxclu[lastsc] = xcluflg; X sceof[lastsc] = false; X } X X X/* sclookup - lookup the number associated with a start condition X * X * synopsis X * char str[], scnum; X * int sclookup; X * scnum/0 = sclookup( str ); X */ X Xint sclookup( str ) Xchar str[]; X X { X return ( findsym( str, sctbl, START_COND_HASH_SIZE )->int_val ); X } END_OF_FILE if test 7527 -ne `wc -c <'sym.c'`; then echo shar: \"'sym.c'\" unpacked with wrong size! fi # end of 'sym.c' fi if test -f 'yylex.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'yylex.c'\" else echo shar: Extracting \"'yylex.c'\" \(4244 characters\) sed "s/^X//" >'yylex.c' <<'END_OF_FILE' X/* yylex - scanner front-end for flex */ 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/yylex.c,v 2.5 90/06/27 23:48:40 vern Exp $ (LBL)"; X#endif X X#include <ctype.h> X#include "flexdef.h" X#include "parse.h" X X X/* ANSI C does not guarantee that isascii() is defined */ X#ifndef isascii X#define isascii(c) ((c) <= 0177) X#endif X X X/* yylex - scan for a regular expression token X * X * synopsis X * X * token = yylex(); X * X * token - return token found X */ X Xint yylex() X X { X int toktype; X static int beglin = false; X X if ( eofseen ) X toktype = EOF; X else X toktype = flexscan(); X X if ( toktype == EOF || toktype == 0 ) X { X eofseen = 1; X X if ( sectnum == 1 ) X { X synerr( "premature EOF" ); X sectnum = 2; X toktype = SECTEND; X } X X else if ( sectnum == 2 ) X { X sectnum = 3; X toktype = 0; X } X X else X toktype = 0; X } X X if ( trace ) X { X if ( beglin ) X { X fprintf( stderr, "%d\t", num_rules + 1 ); X beglin = 0; X } X X switch ( toktype ) X { X case '<': X case '>': X case '^': X case '$': X case '"': X case '[': X case ']': X case '{': X case '}': X case '|': X case '(': X case ')': X case '-': X case '/': X case '\\': X case '?': X case '.': X case '*': X case '+': X case ',': X (void) putc( toktype, stderr ); X break; X X case '\n': X (void) putc( '\n', stderr ); X X if ( sectnum == 2 ) X beglin = 1; X X break; X X case SCDECL: X fputs( "%s", stderr ); X break; X X case XSCDECL: X fputs( "%x", stderr ); X break; X X case WHITESPACE: X (void) putc( ' ', stderr ); X break; X X case SECTEND: X fputs( "%%\n", stderr ); X X /* we set beglin to be true so we'll start X * writing out numbers as we echo rules. flexscan() has X * already assigned sectnum X */ X X if ( sectnum == 2 ) X beglin = 1; X X break; X X case NAME: X fprintf( stderr, "'%s'", nmstr ); X break; X X case CHAR: X switch ( yylval ) X { X case '<': X case '>': X case '^': X case '$': X case '"': X case '[': X case ']': X case '{': X case '}': X case '|': X case '(': X case ')': X case '-': X case '/': X case '\\': X case '?': X case '.': X case '*': X case '+': X case ',': X fprintf( stderr, "\\%c", yylval ); X break; X X default: X if ( ! isascii( yylval ) || ! isprint( yylval ) ) X fprintf( stderr, "\\%.3o", yylval ); X else X (void) putc( yylval, stderr ); X break; X } X X break; X X case NUMBER: X fprintf( stderr, "%d", yylval ); X break; X X case PREVCCL: X fprintf( stderr, "[%d]", yylval ); X break; X X case EOF_OP: X fprintf( stderr, "<<EOF>>" ); X break; X X case 0: X fprintf( stderr, "End Marker" ); X break; X X default: X fprintf( stderr, "*Something Weird* - tok: %d val: %d\n", X toktype, yylval ); X break; X } X } X X return ( toktype ); X } END_OF_FILE if test 4244 -ne `wc -c <'yylex.c'`; then echo shar: \"'yylex.c'\" unpacked with wrong size! fi # end of 'yylex.c' fi echo shar: End of archive 1 \(of 13\). cp /dev/null ark1isdone MISSING="" for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked all 13 archives. rm -f ark[1-9]isdone ark[1-9][0-9]isdone else echo You still need to unpack the following archives: echo " " ${MISSING} fi ## End of shell archive. exit 0 -- Mail submissions (sources or binaries) to <amiga@uunet.uu.net>. Mail comments to the moderator at <amiga-request@uunet.uu.net>. Post requests for sources, and general discussion to comp.sys.amiga.