anchor.diff:    done: boolean;
     term: string;
     nonterm: string;
  +  whitespace: string;
     dumbAtom: PGmrAtom;
   begin
     new(dumbNode);
  
positive.code:     private
        ghash: TGmrHash;
        goal: PGmrNode;
        settings: TStringHash;
      public
        constructor init(inF: TFile);
        destructor destroy; override;
        function getHash: TGmrHash;
        function getGoal: PGmrNode;
        function getHashNode(s: string): AGmrNode;
    end;
  
  implementation
  
  var
    gmr_re: TRegExp;
    terminalClean: TRegExp;
  
  destructor TGmrHash.destroy;
  begin
  
negative.code:       dumbAtom.typed := terminal;
        dumbAtom.data := term;
        // TODO: this is less than optimal if someone has a \Q as a part of their grammer.
        dumbAtom.data := term;
        whiteSpace := settings.last('Whitespace');
        if whiteSpace = '' then
          whiteSpace := '\s*';
        term := '\G\Q'+terminalSpaces.substitute(term, '\E'+whiteSpace+'\Q')+'\E';
        //writeln('  '+term);
        dumbAtom.re   := TRegExp.create(term, []);
        setLength(dumbNode.rhs, length(dumbNode.rhs)+1);
        dumbNode.rhs[length(dumbNode.rhs)-1] := dumbAtom;
      end;
  