minix/external/bsd/flex/dist/examples/fastwc
Lionel Sambuc 84d9c625bf Synchronize on NetBSD-CVS (2013/12/1 12:00:00 UTC)
- Fix for possible unset uid/gid in toproto
 - Fix for default mtree style
 - Update libelf
 - Importing libexecinfo
 - Resynchronize GCC, mpc, gmp, mpfr
 - build.sh: Replace params with show-params.
     This has been done as the make target has been renamed in the same
     way, while a new target named params has been added. This new
     target generates a file containing all the parameters, instead of
     printing it on the console.
 - Update test48 with new etc/services (Fix by Ben Gras <ben@minix3.org)
     get getservbyport() out of the inner loop

Change-Id: Ie6ad5226fa2621ff9f0dee8782ea48f9443d2091
2014-07-28 17:05:06 +02:00
..
Makefile.am Import NetBSD flex 2012-06-18 10:54:47 +00:00
Makefile.in Synchronize on NetBSD-CVS (2013/12/1 12:00:00 UTC) 2014-07-28 17:05:06 +02:00
mywc.c Import NetBSD flex 2012-06-18 10:54:47 +00:00
README Import NetBSD flex 2012-06-18 10:54:47 +00:00
wc1.l Import NetBSD flex 2012-06-18 10:54:47 +00:00
wc2.l Import NetBSD flex 2012-06-18 10:54:47 +00:00
wc3.l Import NetBSD flex 2012-06-18 10:54:47 +00:00
wc4.l Import NetBSD flex 2012-06-18 10:54:47 +00:00
wc5.l Import NetBSD flex 2012-06-18 10:54:47 +00:00

This directory contains some examples illustrating techniques for extracting
high-performance from flex scanners.  Each program implements a simplified
version of the Unix "wc" tool: read text from stdin and print the number of
characters, words, and lines present in the text.  All programs were compiled
using gcc (version unavailable, sorry) with the -O flag, and run on a
SPARCstation 1+.  The input used was a PostScript file, mainly containing
figures, with the following "wc" counts:

	lines  words  characters
	214217 635954 2592172


The basic principles illustrated by these programs are:

	- match as much text with each rule as possible
	- adding rules does not slow you down!
	- avoid backing up

and the big caveat that comes with them is:

	- you buy performance with decreased maintainability; make
	  sure you really need it before applying the above techniques.

See the "Performance Considerations" section of flexdoc for more
details regarding these principles.


The different versions of "wc":

	mywc.c
		a simple but fairly efficient C version

	wc1.l	a naive flex "wc" implementation

	wc2.l	somewhat faster; adds rules to match multiple tokens at once

	wc3.l	faster still; adds more rules to match longer runs of tokens

	wc4.l	fastest; still more rules added; hard to do much better
		using flex (or, I suspect, hand-coding)

	wc5.l	identical to wc3.l except one rule has been slightly
		shortened, introducing backing-up

Timing results (all times in user CPU seconds):

	program	  time 	 notes
	-------   ----   -----
	wc1       16.4   default flex table compression (= -Cem)
	wc1        6.7   -Cf compression option
	/bin/wc	   5.8	 Sun's standard "wc" tool
	mywc	   4.6   simple but better C implementation!
	wc2	   4.6   as good as C implementation; built using -Cf
	wc3	   3.8   -Cf
	wc4	   3.3   -Cf
	wc5	   5.7   -Cf; ouch, backing up is expensive