Skeleton.readDefault()
    Changed: URL url = l.getResource("JFlex/skeleton.default");
    To: URL url = l.getResource("skeleton.default");
    Required to make JUnit tests pass

Parser action handles processing of AST
    Expands all macros
    Builds NFA
    Just remove everything after scanner.t.stop()?
        That's just the timer stop

Regexes are stored as general tree nodes with a type enumeration

Predefined classes are expanded into lists of intervals (i.e. regular char classes)
    They appear to be 7-bit, even when other classes are unicode

BAR is pipe (i.e. alternation)

Frontend and backend classes are mixed (generated classes too)

AST Classes
    Action
    CharClassInterval
    EOFActions
    Interval
    Macros
    RegExp/1/2/s
    sym (generated enumeration)
    SemCheck
        regex checks
        potentially useful

Possible AST Classes
    CharSet? (for char classes?)
        No - only used by emitter
    CharClasses?
        Seems to be a list of all encountered char classes
        Probably backend-only: char classes are returned as RegExp1(sym.CCLASS, ...)
    IntCharSet?
        Used by CharClasses
    Options?
        No - actually program arguments

What happened to all of the options and code regions?
    %unicode/%full update charClasses.setMaxCharCode
    Stored in the scanner
        User code (i.e. freeform header) (string)
        %public, %abstract, %final (boolean)
        %extends, %implements (string)
        %type (string)
        etc
    May need add new flags for options that are expressed as combos of effects

%eof{ %eof} is executed once and returns no value
%eofval{ %eofval} is executed every time and returns a value
%eofthrow applies to %eof

Issue: don't want to process %includes
Issue: have to escape closing sequences in chunks of user code
Issue: %eof
    Turn into %eofval with flag and if
        Issue: name flag without creating conflict
    Add to MetaLexer
        Issue: other lexers don't have it (e.g. flex)
Issue: how does %eofval interact with states?  Is it run in all states?

Require CUP to rebuild JFlex
    CUP is covered by a GPL-compatible, BSD-style license

Their own lexer spec has "dangerous lookahead".