anchor.diff:        break;
       end;
       }
  -    setLength(dumbNode.rhs, length(dumbNode.rhs)+1);
  -    dumbNode.rhs[length(dumbNode.rhs)-1] := dumbAtom;
  +    if dumbAtom.data <> '' then
  +    begin
  +      setLength(dumbNode.rhs, length(dumbNode.rhs)+1);
  +      dumbNode.rhs[length(dumbNode.rhs)-1] := dumbAtom;
  +    end else
  +    begin
  +      dispose(dumbAtom);
  +    end;
     end;
   
     //add(lhs, rhs, TRegExp.create('^'+rhs, [MultiLine, SingleLine, Extended]));
  
positive.code:       dumbAtom.typed := terminal;
        dumbAtom.data := term;
        // TODO: this is less than optimal if someone has a \Q as a part of their grammer.
        term := '\Q'+terminalClean.substitute(term, '\E\s*\Q')+'\E';
        //writeln('  '+term);
        dumbAtom.re   := TRegExp.create(term);
        setLength(dumbNode.rhs, length(dumbNode.rhs)+1);
        dumbNode.rhs[length(dumbNode.rhs)-1] := dumbAtom;
      end;
  
negative.code:   done: boolean;
    term: string;
    nonterm: string;
    whitespace: string;
    dumbAtom: PGmrAtom;
  begin
    new(dumbNode);
  