NOUSERMACRO(lex setDebug main determineSubsets finalizeStates switchOstream
            switchIstream)
includefile(preamble)

COMMENT(
title  has  `id="title"’, the author `id="author"’, and the date
              `id="date"’.
)

htmlstyle(#title,#author,#date)(text-align: center)

affiliation(center(url(University of Groningen)(https://rug.nl/)))

report(Flexc++ (Version _CurVers_) User Guide)
        (
        url(Frank B. Brokken)(mailto:f.b.brokken@rug.nl), 
        url(Jean-Paul van Oosten)(mailto:j.p.van.oosten@rug.nl),nl()
        and (until 0.5.3) Richard Berendsen)
       (_CurYrs_)

lchapter(Introduction)(Introduction)

    includefile(intro/intro.yo)
    
    sect(Running Flexc++)
    includefile(intro/flexc++)

        lsubsect(OPTIONS)(Flexc++ options)
        includefile(intro/options)    

    lsect(simpleexamples)(Some simple examples)
    
        lsubsect(lexermain)(A simple lexer file and main function)
        includefile(intro/simple.yo)

        subsect(An interactive scanner supporting command-line editing)
        includefile(intro/interactive.yo)

lchapter(differences)(Differences between flex and flexc++)

    includefile(differences/intro.yo)
    
    lsect(code_blocks)(Format of the input file)
    includefile(differences/format.yo)
    
        lsubsect(diffdef)(Definition section)
        includefile(differences/definitions.yo)
    
        lsubsect(diffrules)(Rules section)
        includefile(differences/rules.yo)
    
        lsubsect(diffusercode)(User code section)
        includefile(differences/usercode.yo)
    
    lsect(diffpatterns)(Patterns)
    includefile(differences/patterns)
    
    lsect(files)(Generated files)
    includefile(differences/files)
    
    sect(Comment)
    includefile(differences/comment)

    lsect(functions)(Members and macros)
    includefile(differences/members)
    
    sect(Multiple input streams)
    includefile(differences/multiple)

lchapter(FILEFORMAT)(Format of the input file)
includefile(lexer/intro)

    lsect(definitionsection)(Definitions section)
    includefile(lexer/definitions)

        lsubsect(DIRECTIVES)(Directives)
        includefile(lexer/directives)

    lsect(rulessection)(Rules section)
    includefile(lexer/rules)

    lsect(comments)(Comment)
    includefile(lexer/comment)

    lsect(patterns)(Patterns)
    includefile(lexer/patterns)
    
    sect(Character constants)
    includefile(../charconsts)
    
    lsect(actions)(Actions)
    includefile(lexer/actions)
    
    lsect(STARTCONDITIONS)(Start conditions (Mini scanners))
    includefile(lexer/startconditions)
    
        subsect(Notation details)
        includefile(lexer/notation)

    sect(Members)
    includefile(lexer/members)

    sect(Handling input your own way)
    includefile(lexer/input)
    
lchapter(generated-files)(Generated files)
includefile(files/intro)

    lsect(multiplestreams)(Multiple input streams)
    includefile(files/multiple)

chapter(Pre-loading input lines)
includefile(input/intro)

    sect(Using start conditions to pre-load input lines)
    includefile(input/miniscanners)
    
    sect(Wrapping input streams)
    includefile(input/wrapping)

        subsect(The class ScannerStreambuf)
        includefile(input/scannerstreambuf)

        subsect(Illustration)
        includefile(input/illustrationwrap)

chapter(Technical documentation) COMMENT( (PIPETHROUGH(date -R)()) )
includefile(technical/intro)
    
    lsect(NOTATION)(Notation, Terminology)
    includefile(technical/notations)

        subsect(Example of LOP-patterns)
        includefile(technical/lopexamples)

    lsect(PARSER)(The parser)
    includefile(technical/parser)

    lsect(STARTCOND)(Start Conditions and the class StartConditions)
    includefile(technical/startconditions)
    
    lsect(BLOCKS)(Code (action)  blocks)
    includefile(technical/blocks)

    lsect(STATE)(The class State)
    includefile(technical/state)
    
    lsect(STATES)(States)
    includefile(technical/states)
    
    lsect(RULES)(Rules and the class Rule)
    includefile(technical/rules)
    
    lsect(SEMVAL)(Converting REs to Patterns)
    includefile(technical/semantic)

        lsubsect(CHARCLASS)(The class CharClass)
        includefile(technical/charclass)
    
        lsubsect(INTERVAL)(The class Interval)
        includefile(technical/interval)
    
    
    lsect(PATTERNS)(Patterns)
    includefile(technical/pattern)

    lsect(LOOKAHEAD)(Patterns using the lookahead operator (LOP))
    includefile(technical/lop)

        subsect(The parser recognizing LOP patterns)
        includefile(technical/lopparser)

            lsubsubsect(LOPSCs)(Start conditions used by standard 
                                LOP patterns)
            includefile(technical/lopscs)

        lsubsect(LOPPATTERN)(Pattern constructors used with LOP patterns)
        includefile(technical/loppatterns)

        subsect(Adding (LOP-)rules)
        includefile(technical/addrules)
        
        subsect(After parsing: adding LOP start conditions)
        includefile(technical/addlopscs)

        subsect(After parsing: handling LOP rules)
        includefile(technical/loprules)

    lsect(RANGES)(Ranges)
    includefile(technical/ranges)
    
    sect(The class DFAs)
    includefile(technical/dfas)
    
    lsect(DFA)(The DFA)
    includefile(technical/dfa)
    
        subsect(DFA::build: From NFA to DFA)
        includefile(technical/dfabuild)

        subsect(Removing duplicate rows)
        includefile(technical/keepunique)
    
    lsect(DFAROW)(The rows of the DFA: DFAROW)
    includefile(technical/dfarow)
    
        subsect(Associating a DFARow with a Rule)
        includefile(technical/ruletocall)

    lsect(VIABLE)(Finding non-viable rules)
    includefile(technical/nonviable)
   
    sect(Generating Code)
    includefile(technical/gencode)
    
        lsubsect(RANGETAB)(The range-table)
        includefile(technical/rangetable)
    
        subsect(The DFAs)
        includefile(technical/gendfas)

    lsect(RUNTIME)(Run-time operations)
    includefile(technical/runtime)
    
        subsect(Handling BOL-rules)
        includefile(technical/bolrules)
    
    lsect(LOPRUNTIME)(Run-time handling of LOP-patterns)
    includefile(technical/lopruntime)

    sect(Reflex: refreshing flexc++)
    includefile(technical/reflex)
    
    COMMENT(includefile(technical/developernotes))

