        
                                          SemVal
                                            |
                                    +-------+---------+
                                    |                 |
                                StateData             |
                                    |                 |
                                StateString           |
                                    |                 |
                                  State               |
                                    |                 |
   +--------------------------------+                 |
   |                                |                 |
   |                              States              |                         
   |                                |                 |            
   |      +-------------------------+                 +---------+
   |      |                         |                 |         |    
   |      |                         |                 |       TextVal
   |      |                         |                 |         |    
   |      |   +---+---------------------------------------------+    
   |      |   |   |                 |                 |         |      
   |      |   |   |                 |     Block       |         |      
   |      |   |   |                 |       |         |         |      
   |      |   |   |        +----------------+-------------------+      
   |      |   |   |        |        |                 |         |    
   |      +---+   |        |        |                 |         |    
   |      |       |        |        | CharRange       |         |    
   |      |   StartCond.   |        |     |           |         |    
   |      |       |        |        |     |           |         |    
   |      |       |        |        |     +---+-------+         |    
   |      |       |        |        |         |       |         |    
   |      |       |        |        |     CharClass   |         |         
   |      |       |        |        |         |       |         |         
   |      |       |        |        +---------+       |         |    
   |      |       |        |        |                 |         |         
   |      |       |        |     Pattern              |         |         
   |      |       |        |        |                 |         |         
   |      |       |        +--------+                 |         |         
   |      |       |        |                          |         |         
   |      |       |      Rule                         |         |         
   |      |       |        |                          |         |         
   |      |       +--------+                          |         |         
   |      |                |                          |         |         
   |    Ranges           Rules                     Decimal   Scanner 
   |      |                |                          |         |    
   |      +----------------+---------------------+----+---------+    
   |      |                                      |                   
   +--------------------+                        |                   
   |      |             |                        |                   
   |      |             +------------------------+                   
   +---+--+                                      |                   
       |                                         |                   
     DFARow                                      |                   
       |                                         |                   
      DFA                         Options        |                   
       |                             |           |                   
      DFAs                       +---+---+       |
       |                         |       |       |                        
       +-------------------------+       +-------+
       |                                         |                     
      Generator                               Parser                   
       |                                         |                     
       +----------------+------------------------+     
                        |                 
                      flexc++

The file CLASSES defines the directory containing the sources of the
abovementioned classes. Also, it contains the class dependencies. If a class
depends on a class listed higher up in the class organization then its
immediately superior class is mentioned immediately following its class
name. E.g., for DFARow the CLASSES entry looks like this:

dfarow  ranges rules

The icmake build script, when compiling a new version of the program looks for
a file ALL in the class-directories. If found, all the class's sources and all
sources of all classes depending on that class as well as flexc++.cc itself
are recompiled. This allows developers to modify the internal organization of
a class (or the implementation of a member function that's defined inline) and
recompile all sources that may be affected by the modified class. Multiple ALL
files may be touched before calling `build program'. E.g., following

touch options/ALL dfarow/ALL 

all sources of DFARow, DFA, Options and Parser, as well as flexc++.cc will be
recompiled. 




    CharClass: The characters of a character-class
    
    CharRange: produces all predefined character ranges, constructing them
            only once, when needed for the first time.

    SemVal: parser's semantic value stack data type. A polymorphic base class

    StartConditions: defines the rules that are defined in each of the Start
        Conditions 

    StateData: polymorphic base class of all kinds of data that may be stored
        in a State. This basic form contains two fields defining states to
        transit to from this state.

    StateString: derived from StateData, also contains a string.

    State:  initially a state in an NFA, defined by the parser

    States: stores and manages all states

    Block: stores action blocks associated with Rules 

    FStreamInfo: interfaces Scanner to actual input stream(s)

    Options: stores all otions/directives

    Scanner: performs lexial analysis

    Decimal: stores interval values ({x,y} specs)

    PatternVal: stores a pattern's type and begin and end state #s

    TextVal: plain textual string as-is

    Rule: stores where to find the rule's State element in States and the
        contents of the rule's action block.

    Rules: the vector of Rule elements.

    Parser: Handles syntax checks and builds State vector 


