anchor.diff:   *
    * To create a new composite grammar subclass [CompositeParser]. Override
    * the method [initialize] and for every production call [def] giving the
  - * parsers a name. The start production must be named 'start'. To refer to
  - * other produtions use [ref]. To redefine or attach actions to productions
  - * use [redef] and [action].
  + * production a name. The start production must be named 'start'. To refer
  + * to other produtions (forward and backward) use [ref].
  + *
  + * You might want to create future subclasses of your composite grammar
  + * to redefine the grammar or attach custom actions. In such a subclass
  + * override the method [initialize] again and call super. Then use
  + * [redef] to redefine an existing production, and [action] to attach an
  + * action to an existing production.
    */
   abstract class CompositeParser extends _SetableParser {
   
  
positive.code:   }
  
    /**
     * Attaches an action [function] to an existing production [name].
     */
    void action(String name, dynamic function(Dynamic)) {
      redef(name, (parser) => parser.map(function));
    }
  
    /**
     * Returns a reference to a defined production named [name]. This method
     * should only be called for fully initialized instances.
     */
    Parser operator [](String name) => _defined[name];
  
negative.code:   }
  
    /**
     * Returns a reference to a production with a [name]. Only call this method
     * from [initialize].
     *
     * At the point of calling [ref] the production does not necessaryily have
     * to be defined yet. The constructor of the class makes sure to replace
     * and optimize references away before the grammar is run.
     */
    Parser ref(String name) {
      return _undefined.putIfAbsent(name, () {
        return failure('Uninitalized production: $name').setable();
      });
    }
  
    /**
     * Redefinies an existing production with a [name] and a [function]
     * producing a new parser. The code raises a [StateError] if [name]
     * is an undefined production. Only call this method from [initialize].
     *
     * The following example redefines the previously defined list production
     * by making it optional:
     *
     *     redef('list', (parser) => parser.optional());
     */
    void redef(String name, Parser function(Parser)) {
      if (!_defined.containsKey(name)) {
  