//import static main.DateStructures.*; sclass EnglishDateParser > DateStructures { bool assumeFuture = true; // e.g. for "tuesday" [not used] SomeDate parse(S s) null { new ProbabilisticParser1 parser; // action that parses a number ProbabilisticParser1.Action number = parser.new Any { double calcProbabilityForMatchedText(S s) { ret isInteger(s) ? 100 : 50; } }; LS tok = javaTok(s); // YMD rule parser.addState(tok, parser.ruleFromActions( number, parser.new ConsumeToken("/"), number, parser.new ConsumeToken("/"), number )).userObject = func(Matches m) -> SomeDate { new Day(parseInt($3), new Month(parseInt($2), new Year(parseInt($1)))) }; // weekday rule parser.addState(tok, parser.ruleFromActions( parser.new ConsumeOneOfTokens(asCISet(englishWeekdays())), )).userObject = func(Matches m) -> SomeDate { new Weekday(parseEnglishWeekday(print("day", $1))) }; parser.think(); ProbabilisticParser1.State state = parser.bestDoneState(); print(state); if (state != null) { Matches m = parser.stateToMatches(state, action -> !action instanceof ProbabilisticParser1.ConsumeToken); print(m); ret (SomeDate) callF(state.userObject, m); } } }