AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Zusätzliches WOrt in Hashtabelle einfügen?

Ein Thema von schöni · begonnen am 17. Mai 2012 · letzter Beitrag vom 20. Mai 2012
 
schöni

Registriert seit: 23. Jan 2005
Ort: Dresden
445 Beiträge
 
Delphi 7 Personal
 
#1

Zusätzliches WOrt in Hashtabelle einfügen?

  Alt 17. Mai 2012, 18:44
Hallo,

in diesem Quelltext gibt es eine Hashtabelle mit den in Pascal reservierten Wörtern. Allerdings fehlt das Wort "ASM". An welcher Stelle muss ich das einfügen, damit der hier verwendete Algo das eigefügte Wort auch findet und ohne die bisherige Wortfolge für den verwendeten Algo unbrauchbar zu machen.

Hier ist die Quelle:

Delphi-Quellcode:
unit Reserved {word or directive identificator };
{ Under GNU License            }
{ JOAO PAULO SCHWARZ SCHULER }
{ http://www.schulers.com      }
{ Turbo Pascal Source          }
{ Free Pascal Source for DOS   }
{ Free Pascal Source for Linux }
{ Delphi Source                }


interface

Const HashingNumber = 23;
      MaxOnHashLine = 10;

type STR20 = string[20];

Const RWords : array[0..HashingNumber-1,0..MaxOnHashLine-1] of str20 =
(
{00}  ('CONST','OR','TYPE','','','','','','',''),
{01}  ('SHL','FOR','DESTRUCTOR','INHERITED','PROPERTY','','','','',''),
{02}  ('TO','OBJECT','TRY','CDECL','','','','','',''),
{03}  ('VAR','ASSEMBLER','','','','','','','',''),
{04}  ('AND','FORWARD','THEN','IMPLEMENTATION','LIBRARY','RAISE','','','',''),
{05}  ('IF','UNTIL','PUBLISHED','STORED','','','','','',''),
{06}  ('SET','CLASS','INITIALIZATION','THREADVAR','','','','','',''),
{07}  ('LABEL','PROGRAM','SHR','FINALIZATION','NODEFAULT','','','','',''),
{08}  ('CASE','END','DISPID','INDEX','RESIDENT','','','','',''),
{09}  ('ABSOLUTE','WHILE','DO','AUTOMATED','','','','','',''),
{10}  ('RECORD','PACKED','INLINE','PUBLIC','PRIVATE','AS','FAR','OVERRIDE','',''),
{11}  ('OF','STRING','NOT','DEFAULT','DYNAMIC','MESSAGE','','','',''),
{12}  ('FILE','REPEAT','BEGIN','','','','','','',''),
{13}  ('IN','EXTERNAL','INTERFACE','EXPORTS','NAME','STDCALL','','','',''),
{14}  ('GOTO','PROCEDURE','','','','','','','',''),
{15}  ('DOWNTO','ARRAY','PROTECTED','','','','','','',''),
{16}  ('FUNCTION','','','','','','','','',''),
{17}  ('MOD','WITH','','','','','','','',''),
{18}  ('IS','NEAR','','','','','','','',''),
{19}  ('XOR','CONSTRUCTOR','','','','','','','',''),
{20}  ('DIV','NIL','EXCEPT','','','','','','',''),
{21}  ('ELSE','UNIT','USES','FINALLY','ABSTRACT','','','','',''),
{22}  ('EXPORT','PASCAL','VIRTUAL','','','','','','',''));

function Key(S:string;Divisor:byte):word;
{calculates de hashing code}
{ calcula chave de acesso }

function GetHash(S:String):word;

function IsReserved(S:string):boolean;
{ checks if S is a Reserved word or a directive}


implementation

function Key(S:string;Divisor:byte):word;
{ calcula chave de acesso }
var I:integer;
    SOMA:longint;
begin
SOMA:=0;
for I:=1 to length(S) do
    inc(SOMA,ord(S[I]));
Key:=SOMA mod Divisor;
end;

function GetHash(S:String):word;
begin
GetHash:=Key(S,HashingNumber);
end;

function IsReserved(S:string):boolean;
{ checks if S is a Reserved word or a directive}
var HN,L:word;
    C:word;
    Found:boolean;
begin
L:=Length(S);
for C:=1 to L
    do S[C]:=UpCase(S[C]);

HN:=GetHash(S);
C:=0;
Found:=false;
while (C<MaxOnHashLine) and (RWORDS[HN,C]<>'') and not(Found) do
      begin
      Found:=Found or (S=RWORDS[HN,C]);
      inc(C);
      end;
IsReserved:=Found;
end;


end. {of unit}
Aus dem Quellcode werde ich da nicht schlau. Wo gibt es Literatur zu diesem Thema, aber bitte praxisnah.

Oder ist die Einfügestelle völlig egal. Key berechnet dann einen Hashwert, abhängig von der Einfügestelle und dem Wort.

Allerdings kann ich mir nicht wirklich vostellen, das der Einfügeort echt egal ist. Eher glaube ich das die beherigen Pascal Wörter algo-bedingt an ebendiesen Stellen stehen müssen.

Wer kann hier Licht ins Dunkel bringen?

Ich möchte gerne das fehlende Wort 'ASM' ergänzen und wenn ich später noch andere fehlende Wörter finden sollte, diese auch ergänzen.

Die Konstante RWords enthält die Hash-Tabelle.

.
Damit der Topf nicht explodiert, lässt man es ab und zu mal zischen.

Geändert von schöni (17. Mai 2012 um 18:46 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz