protected FutureParser scoped(final String name) {
		return new FutureParser() {
			protected boolean accepts(TokenStream stream) {
				if (LOGGER.isTraceEnabled()) {
					push(name + " ?");
				}

				Assign assign = null;

				if (scope.size() > 0) {
					// Get the "lvalue".
					assign = (Assign) scope.peek().get("=");
				}

				Map<String, Object> newScope = new HashMap<String, Object>();
				// Push the "lvalue" as the return target.
				newScope.put("return", assign);

				scope.push(newScope);

				stream.mark(KoopaMarkers.down(name));
				boolean accepts = parser.accepts(stream);
				stream.mark(KoopaMarkers.up(name));
		//		LOGGER.info("cobol grammer :" + name );

				scope.pop();

				if (LOGGER.isTraceEnabled()) {
					pop(name + (accepts ? ": yes" : ": no"));
				}
				return accepts;
			}
		};
	}