anchor.diff:        if (_defined.containsKey(name)) {
           return _defined[name];
         } else {
  -        throw new StateError('Undefined production: $name');
  +        throw new UndefinedProductionError(name);
         }
       } else {
         return _undefined.putIfAbsent(name, () {
  
positive.code:     _delegate = ref('start');
      _undefined.forEach((name, parser) {
        if (!_defined.containsKey(name)) {
          throw new StateError('Undefined production: $name');
        }
        parser.set(_defined[name]);
      });
  
negative.code:    */
    void def(String name, Parser parser) {
      if (_completed) {
        throw new CompletedParserError();
      } else if (_defined.containsKey(name)) {
        throw new RedefinedProductionError(name);
      } else {
        _defined[name] = parser;
      }
  