sclass EnglishDateParser > DateStructures { bool assumeFuture = true; // e.g. for "tuesday" [not used] ProbabilisticMachine2 pm; LS tok; // tokenized input class CompletedParse extends ProbabilisticMachine2.State { IntRange tokenRange; // what did we parse SomeDate interpretation; // what do we think it means } record ParseYear(int iTok) extends ProbabilisticMachine2.State { int minTokensToConsume = 0; double calcProbabilityForMatchedText(S s) { } void step { int maxTokensToConsume = state.remainingTokens(); } @Override void run(State state) { if (verbose) print(this + ": maxTokensToConsume= " + maxTokensToConsume); for (int n = minTokensToConsume; n <= maxTokensToConsume; n++) { State s = state.prepareClone(); s.iNextToken += n*2; LS tok = subList(state.tok, state.iNextToken, s.iNextToken-1); s.probability = multiplyPercentages(s.probability, calcProbabilityForMatchedTokens(tok)); s.matches = revChainPlus(s.matches, pair(state, tok)); pm.addState(s); } } } if (isInteger(tok.get(iTok))) ret } } record ScanFromToken(int iTok) extends ProbabilisticMachine2.State { void step() { if (i <= l(tok)) } } SomeDate parse(S s) null { pm = new ProbabilisticMachine2; tok = javaTok(s); // let's try to parse a year just to get started pm.addState(new ScanFromToken(1)); } }