Einzelnen Beitrag anzeigen

Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#29

AW: SynHighlighter erweitern

  Alt 10. Sep 2012, 13:25
Du kannst einem Mut machen Und nu?
Bist du bezüglich meinen Sachen da weiter gekommen irgendwie, weil du ja meintest sollte gehen?
Na nu mal ganz langsam mit die junge Pferde

Erstmal muss ich dahinter steigen, wie dieser blöde Hash-Algo funktioniert. Der steckt ja mehr oder weniger identisch in allen Syn-Highlightern drin. Nur mit anderen Konstanten. Ich vermute, dass die Konstanten in Abhängigkeit von der Keyword-Liste auch geändert werden müssen, damit keine Dupletten entstehen.

Darum wieder die Frage an die Algoritmus-Experten hier: Könnt ihr die Sache mal ein wenig für mich erhellen? Der Originalsource findet sich hier. Entscheidend sind die Zeilen 234 und 237:
Delphi-Quellcode:
function TSynPHPSyn.HashKey(Str: PWideChar): Cardinal;
begin
  Result := 0;
  while IsIdentChar(Str^) do
  begin
    Result := Result * 596 + Ord(Str^) * 413;
    inc(Str);
  end;
  Result := Result mod 137;
  fStringLen := Str - fToIdent;
end;
Ich verstehe halt die Bedeutung der drei Konstanten 596, 413 und 137 nicht. Wobei ich bei 137 vermute, es ist der höchstmögliche Hashwert plus 1. Doch daraus ergibt sich dann ein Henne-und-Ei-Problem: Den höchsten Hashwert bekommt man nur unter Anwendung der Hash-Routine, welche ja zu ändern wäre

Geändert von Codehunter (10. Sep 2012 um 13:52 Uhr)
  Mit Zitat antworten Zitat