home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Media Share 13
/
mediashare_13.zip
/
mediashare_13
/
ZIPPED
/
PROGRAM
/
APR94_1.ZIP
/
ALLEY.ZIP
/
SEARCH.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1994-01-04
|
3KB
|
158 lines
(* ----------------------------------------------------------- *(
** search.pas -- Search engine for IDENT program **
** ----------------------------------------------------------- **
** **
** Trie search algorithm **
** **
** ----------------------------------------------------------- **
** Copyright (c) 1994 by Tom Swan. All rights reserved. **
)* ----------------------------------------------------------- *)
unit Search;
INTERFACE
uses Common;
{ Return true if Ident is a Turbo Pascal reserved word }
function IsReserved(Ident: IdentStr): Boolean;
IMPLEMENTATION
type
ResWord = String[14];
PResWordRec = ^ResWordRec;
ResWordRec = record
Word: ResWord; { Reserved word string }
Next: PResWordRec; { List link field }
end;
var
Index: array['a' .. 'z'] of PResWordRec;
{ Add word W to list at P }
procedure AddList(var P: PResWordRec; var W: ResWord);
begin
if (P <> nil) then
AddList(P^.Next, W)
else begin
P := new(PResWordRec);
if (P = nil) then
begin
Writeln('Out of memory');
Halt;
end;
P^.Word := W;
P^.Next := nil
end
end;
{ Add word W to global Index }
procedure AddWord(W: ResWord);
begin
if Length(W) = 0 then exit;
AddList(Index[W[1]], W)
end;
{ Initialize search engine variables }
procedure Initialize;
var
C: Char; { Index[] array index }
begin
for C := 'a' to 'z' do
Index[C] := nil;
AddWord('and');
AddWord('array');
AddWord('asm');
AddWord('begin');
AddWord('case');
AddWord('const');
AddWord('constructor');
AddWord('destructor');
AddWord('div');
AddWord('do');
AddWord('downto');
AddWord('else');
AddWord('end');
AddWord('export');
AddWord('exports');
AddWord('far');
AddWord('file');
AddWord('for');
AddWord('function');
AddWord('goto');
AddWord('if');
AddWord('implementation');
AddWord('in');
AddWord('inherited');
AddWord('inline');
AddWord('interface');
AddWord('label');
AddWord('library');
AddWord('mod');
AddWord('near');
AddWord('nil');
AddWord('not');
AddWord('object');
AddWord('of');
AddWord('or');
AddWord('packed');
AddWord('private');
AddWord('procedure');
AddWord('program');
AddWord('public');
AddWord('record');
AddWord('repeat');
AddWord('set');
AddWord('shl');
AddWord('shr');
AddWord('string');
AddWord('then');
AddWord('to');
AddWord('type');
AddWord('unit');
AddWord('until');
AddWord('uses');
AddWord('var');
AddWord('virtual');
AddWord('while');
AddWord('with');
AddWord('xor');
end;
{ Trie search algorithm }
function IsReserved(Ident: IdentStr): Boolean;
var
P: PResWordRec;
begin
IsReserved := false;
if Length(Ident) = 0 then exit;
DownCase(Ident);
P := Index[Ident[1]];
while(P <> nil) do
begin
if P^.Word = Ident then
begin
IsReserved := true;
exit
end;
P := P^.Next
end
end;
begin
Initialize;
end.
(*
// --------------------------------------------------------------
// Copyright (c) 1993 by Tom Swan. All rights reserved
// Revision 1.00 Date: 01/04/1994 Time: 09:46 am
*)