Quellcodebibliothek Statistik Leitseite products/sources/formale Sprachen/C/Flex/examples/fastwc/   (Fast Lexical Analyzer Version 2.6©)  Datei vom 6.11.2012 mit Größe 1 kB image not shown  

Quelle  README   Sprache: unbekannt

 
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

[ Dauer der Verarbeitung: 0.3 Sekunden  (vorverarbeitet)  ]