ParseResult internalParse(
     String s, Map<String, Integer> targetUnionDecisions, boolean mustConsumeStr) {
   List<Token.AbstractToken> outputToks = new ArrayList<Token.AbstractToken>();
   String newStr = Tokenizer.attemptParse(tokenClassIdentifier, tokenParameter, s, outputToks);
   if (newStr == null || (mustConsumeStr && newStr.trim().length() != 0)) {
     return null;
   }
   assert (outputToks.size() == 1);
   // outputToks should contain just one result.
   return new ParseResult(
       outputToks.get(0).get(), Token.AbstractToken.hasData(tokenClassIdentifier), newStr);
 }