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