interface Parser<T> {
Result<T> parse (PushbackReader in) throws IOException;
}
class Arithmetic {
final static Parser<Integer> product =
Combine.transform(
Combine.sepBy(Atom.expect('*'), Basic.natural),
Combine.fold(1,
new Function<Pair<Integer, Integer>, Integer>() {
public Integer compute(Pair<Integer, Integer> x) {
return x.getFirst() * x.getSecond(); } })); }