anchor.diff:   */
   abstract class CompositeParser extends _SetableParser {
   
  -  final Map<String, Parser> _defined;
  -  final Map<String, SetableParser> _undefined;
  +  bool _completed = false;
  +  Map<String, Parser> _defined = new Map();
  +  Map<String, SetableParser> _undefined = new Map();
   
  -  CompositeParser()
  -      : super(failure('Uninitalized production: start')),
  -        _defined = new Map(),
  -        _undefined = new Map() {
  +  CompositeParser() : super(failure('Uninitalized production: start')) {
       initialize();
  +    _complete();
  +  }
  +
  +  /**
  +   * Initializes the composite grammar.
  +   */
  +  void initialize();
  +
  +  /**
  +   * Internal method to complete the grammar.
  +   */
  +  void _complete() {
       _delegate = ref('start');
       _undefined.forEach((name, parser) {
         if (!_defined.containsKey(name)) {
  
positive.code:     redef(name, (parser) => parser.map(function));
    }
  
    /**
     * Returns a reference to the production with the given [name]. This method
     * should only be called for fully initialized instances.
     */
    Parser operator [](String name) => _defined[name];
  
  }
  
negative.code:    *     redef('list', (parser) => parser.optional());
     */
    void redef(String name, Parser function(Parser)) {
      if (_completed) {
        throw new StateError('Completed parsers cannot be changed');
      } else if (!_defined.containsKey(name)) {
        throw new StateError('Undefined production: $name');
      } else {
        _defined[name] = function(_defined[name]);
  