57 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 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
 | 
