public abstract class StringParsingTask<E>
An instantiation of this abstract class parses a String and
returns an object of type E. It's called a
StringParsingTask (rather than StringParser)
because a new instance is constructed for each String to be
parsed. We do this to be thread-safe: methods in
StringParsingTask share state information (e.g. current
string index) via instance variables.