sclass EnglishDateParser > DateStructures { bool assumeFuture = true; // e.g. for "tuesday" [not used] LS tok; ItIt> parse(S s) { tok = javaTok(s); ItIt> years = nestedIterator parseYear(lai_codeTokens(tok)); ret concatIterators(mapI(years, year -> (ItIt>)itemPlusIterator( pwt_generalize(year), pwt_generalizeIterator(parseFixedToken("/", year.remaining()))))); // := "/" "/" //between(parseInt(s), 1900, 2100) //ret nestedIterator parseNumber(lai_codeTokenIndices(tok)); } ItIt> parseNumber(ListAndIndex toParse) { ret mapI_nonNulls(pwt_followingTokens(1, 2, toParse), p -> isInteger(p!) ? p.withValue(parseInt(p!)) : null); } ItIt> parseYear(ListAndIndex toParse) { ret filterI(parseNumber(toParse), p -> between(p!, 1900, 2100)); } ItIt> parseFixedToken(S token, ListAndIndex toParse) { ret filterI(pwt_followingTokens(1, 2, toParse), p -> eqic(p!, token)); } } static ItIt> pwt_generalizeIterator(ItIt> it) { ret (ItIt) it; } static ParsedWithTokens pwt_generalize(ParsedWithTokens p) { ret (ParsedWithTokens) p; }