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 >
Pascal/Delphi Source File  |  1994-01-04  |  3KB  |  158 lines

  1. (* ----------------------------------------------------------- *(
  2. **  search.pas -- Search engine for IDENT program              **
  3. ** ----------------------------------------------------------- **
  4. **                                                             **
  5. **  Trie search algorithm                                      **
  6. **                                                             **
  7. ** ----------------------------------------------------------- **
  8. **  Copyright (c) 1994 by Tom Swan. All rights reserved.       **
  9. )* ----------------------------------------------------------- *)
  10.  
  11. unit Search;
  12.  
  13. INTERFACE
  14.  
  15. uses Common;
  16.  
  17. { Return true if Ident is a Turbo Pascal reserved word }
  18. function IsReserved(Ident: IdentStr): Boolean;
  19.  
  20. IMPLEMENTATION
  21.  
  22. type
  23.  
  24.   ResWord = String[14];
  25.   
  26.   PResWordRec = ^ResWordRec;
  27.   ResWordRec = record
  28.     Word: ResWord;      { Reserved word string }
  29.     Next: PResWordRec;  { List link field }
  30.   end;
  31.   
  32. var
  33.  
  34.   Index: array['a' .. 'z'] of PResWordRec;
  35.  
  36. { Add word W to list at P }
  37. procedure AddList(var P: PResWordRec; var W: ResWord);
  38. begin
  39.   if (P <> nil) then
  40.     AddList(P^.Next, W)
  41.   else begin
  42.     P := new(PResWordRec);
  43.     if (P = nil) then
  44.     begin
  45.       Writeln('Out of memory');
  46.       Halt;
  47.     end;
  48.     P^.Word := W;
  49.     P^.Next := nil
  50.   end
  51. end;
  52.  
  53. { Add word W to global Index }
  54. procedure AddWord(W: ResWord);
  55. begin
  56.   if Length(W) = 0 then exit;
  57.   AddList(Index[W[1]], W)
  58. end;
  59.  
  60. { Initialize search engine variables }
  61. procedure Initialize;
  62. var
  63.   C: Char;  { Index[] array index }
  64. begin
  65.   for C := 'a' to 'z' do
  66.     Index[C] := nil;
  67.   AddWord('and');
  68.   AddWord('array');
  69.   AddWord('asm');
  70.   AddWord('begin');
  71.   AddWord('case');
  72.   AddWord('const');
  73.   AddWord('constructor');
  74.   AddWord('destructor');
  75.   AddWord('div');
  76.   AddWord('do');
  77.   AddWord('downto');
  78.   AddWord('else');
  79.   AddWord('end');
  80.   AddWord('export');
  81.   AddWord('exports');
  82.   AddWord('far');
  83.   AddWord('file');
  84.   AddWord('for');
  85.   AddWord('function');
  86.   AddWord('goto');
  87.   AddWord('if');
  88.   AddWord('implementation');
  89.   AddWord('in');
  90.   AddWord('inherited');
  91.   AddWord('inline');
  92.   AddWord('interface');
  93.   AddWord('label');
  94.   AddWord('library');
  95.   AddWord('mod');
  96.   AddWord('near');
  97.   AddWord('nil');
  98.   AddWord('not');
  99.   AddWord('object');
  100.   AddWord('of');
  101.   AddWord('or');
  102.   AddWord('packed');
  103.   AddWord('private');
  104.   AddWord('procedure');
  105.   AddWord('program');
  106.   AddWord('public');
  107.   AddWord('record');
  108.   AddWord('repeat');
  109.   AddWord('set');
  110.   AddWord('shl');
  111.   AddWord('shr');
  112.   AddWord('string');
  113.   AddWord('then');
  114.   AddWord('to');
  115.   AddWord('type');
  116.   AddWord('unit');
  117.   AddWord('until');
  118.   AddWord('uses');
  119.   AddWord('var');
  120.   AddWord('virtual');
  121.   AddWord('while');
  122.   AddWord('with');
  123.   AddWord('xor');
  124. end;
  125.  
  126. { Trie search algorithm }
  127. function IsReserved(Ident: IdentStr): Boolean;
  128. var
  129.   P: PResWordRec;
  130. begin
  131.   IsReserved := false;
  132.   if Length(Ident) = 0 then exit;
  133.   DownCase(Ident);
  134.   P := Index[Ident[1]];
  135.   while(P <> nil) do
  136.   begin
  137.     if P^.Word = Ident then
  138.     begin
  139.       IsReserved := true;
  140.       exit
  141.     end;
  142.     P := P^.Next
  143.   end
  144. end;
  145.  
  146. begin
  147.   Initialize;
  148. end.
  149.  
  150.  
  151. (*
  152. // --------------------------------------------------------------
  153. // Copyright (c) 1993 by Tom Swan. All rights reserved
  154. // Revision 1.00    Date: 01/04/1994   Time: 09:46 am
  155. *)
  156.  
  157.  
  158.