Scanning char ranges was far too inefficient (due to repetitive analysis of the char ranges and the repetitive computation of the corresponding characteristic function); hence, analysis and creation of char range predicates has been completely rewritten.
Scanning char ranges was far too inefficient (due to repetitive
analysis of the char ranges and the repetitive computation of the
corresponding characteristic function); hence, analysis and creation
of char range predicates has been completely rewritten.

Char range predicates now use bit strings instead of vectors;
predicate computation is a memo function such that scanning ranges is
no more just a matter of expensive predicate calculation (performed
again and again for each scanf call). In addition, trivial and very
common char ranges (one, two, or threee characters only) are treated
specially and more efficiently.


git-svn-id: e7e61699ce1738538ffebb75374fbea0924bc775@5884 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02

yunxing/ocaml,yallop/camlp4,eliberis/ocaml,msprotz/ocaml,msprotz/ocaml,msprotz/ocaml,gerdstolpmann/ocaml,yunxing/ocaml,yunxing/ocaml,hhugo/camlp4,gerdstolpmann/ocaml,eliberis/ocaml,msprotz/ocaml,gerdstolpmann/ocaml,msprotz/ocaml,yunxing/ocaml,chambart/camlp4,yunxing/ocaml,gerdstolpmann/ocaml,eliberis/ocaml,gerdstolpmann/ocaml,eliberis/ocaml,eliberis/ocaml