protected Parser plus(final Parser parser) {
		return new Parser() {
			protected boolean accepts(TokenStream stream) {
				if (LOGGER.isTraceEnabled()) {
					push("[plus>");
				}

				TokenStream sub = new SubordinateTokenStream(stream);

				if (!parser.accepts(sub)) {
					sub.restore();

					if (LOGGER.isTraceEnabled()) {
						pop("<plus]");
					}

					return false;
				}

				do {
					sub.commit();
				} while (parser.accepts(sub));

				sub.restore();

				if (LOGGER.isTraceEnabled()) {
					pop("<plus]");
				}

				return true;
			}
		};
	}