I found that it is more efficient to make the regex case insensitive
than to pre-process your input. If you use equivalence classes then
there is no increase in table size. The way to do it is to have a case
insensitive flag that you can turn on and off (see the flex syntax for
(?i: ) etc.) You donbt need to actually update the text of your regex,
you just test for the flag when you process each character set and add
in both characters then if necessary. So for example (?i:[abc])
resolves to [ABCabc].