|
|
DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 Tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: B T
Length: 7317 (0x1c95)
Types: TextFile
Names: »B«
└─⟦a7d1ea751⟧ Bits:30000550 8mm tape, Rational 1000, !users!projects 94_04_11
└─⟦129cab021⟧ »DATA«
└─⟦this⟧
└─⟦2f6cfab89⟧ Bits:30000547 8mm tape, Rational 1000, !projects 94-01-04
└─⟦d65440be7⟧ »DATA«
└─⟦this⟧
with Misc_Defs, Misc, Nfa, Text_Io, Int_Io, Tstring;
package body Sym is
use Misc_Defs;
use Tstring;
-- addsym - add symbol and definitions to symbol table
--
-- true is returned if the symbol already exists, and the change not made.
procedure Addsym (Sym, Str_Def : in Vstring;
Int_Def : in Integer;
Table : in out Hash_Table;
Table_Size : in Integer;
Result : out Boolean) is
Hash_Val : Integer := Hashfunct (Sym, Table_Size);
Sym_Entry : Hash_Link := Table (Hash_Val);
New_Entry, Successor : Hash_Link;
begin
while (Sym_Entry /= null) loop
if (Sym = Sym_Entry.Name) then
-- entry already exists
Result := True;
return;
end if;
Sym_Entry := Sym_Entry.Next;
end loop;
-- create new entry
New_Entry := new Hash_Entry;
Successor := Table (Hash_Val);
if ((Successor /= null)) then
New_Entry.Next := Successor;
Successor.Prev := New_Entry;
else
New_Entry.Next := null;
end if;
New_Entry.Prev := null;
New_Entry.Name := Sym;
New_Entry.Str_Val := Str_Def;
New_Entry.Int_Val := Int_Def;
Table (Hash_Val) := New_Entry;
Result := False;
return;
exception
when Storage_Error =>
Misc.Aflexfatal ("symbol table memory allocation failed");
end Addsym;
-- cclinstal - save the text of a character class
procedure Cclinstal (Ccltxt : in Vstring; Cclnum : in Integer) is
-- we don't bother checking the return status because we are not called
-- unless the symbol is new
Dummy : Boolean;
begin
Addsym (Ccltxt, Nul, Cclnum, Ccltab, Ccl_Hash_Size, Dummy);
end Cclinstal;
-- ccllookup - lookup the number associated with character class text
function Ccllookup (Ccltxt : in Vstring) return Integer is
begin
return Findsym (Ccltxt, Ccltab, Ccl_Hash_Size).Int_Val;
end Ccllookup;
-- findsym - find symbol in symbol table
function Findsym (Symbol : in Vstring;
Table : in Hash_Table;
Table_Size : in Integer) return Hash_Link is
Sym_Entry : Hash_Link := Table (Hashfunct (Symbol, Table_Size));
Empty_Entry : Hash_Link;
begin
while (Sym_Entry /= null) loop
if (Symbol = Sym_Entry.Name) then
return Sym_Entry;
end if;
Sym_Entry := Sym_Entry.Next;
end loop;
Empty_Entry := new Hash_Entry;
Empty_Entry.all := (null, null, Nul, Nul, 0);
return Empty_Entry;
exception
when Storage_Error =>
Misc.Aflexfatal ("dynamic memory failure in findsym()");
return Empty_Entry;
end Findsym;
-- hashfunct - compute the hash value for "str" and hash size "hash_size"
function Hashfunct
(Str : in Vstring; Hash_Size : in Integer) return Integer is
Hashval, Locstr : Integer;
begin
Hashval := 0;
Locstr := Tstring.First;
while (Locstr <= Tstring.Len (Str)) loop
Hashval := ((Hashval * 2) + Character'Pos (Char (Str, Locstr))) mod
Hash_Size;
Locstr := Locstr + 1;
end loop;
return Hashval;
end Hashfunct;
--ndinstal - install a name definition
procedure Ndinstal (Nd, Def : in Vstring) is
Result : Boolean;
begin
Addsym (Nd, Def, 0, Ndtbl, Name_Table_Hash_Size, Result);
if (Result) then
Misc.Synerr ("name defined twice");
end if;
end Ndinstal;
-- ndlookup - lookup a name definition
function Ndlookup (Nd : in Vstring) return Vstring is
begin
return Findsym (Nd, Ndtbl, Name_Table_Hash_Size).Str_Val;
end Ndlookup;
-- scinstal - make a start condition
--
-- NOTE
-- the start condition is Exclusive if xcluflg is true
procedure Scinstal (Str : in Vstring; Xcluflg : in Boolean) is
-- bit of a hack. We know how the default start-condition is
-- declared, and don't put out a define for it, because it
-- would come out as "#define 0 1"
-- actually, this is no longer the case. The default start-condition
-- is now called "INITIAL". But we keep the following for the sake
-- of future robustness.
Result : Boolean;
begin
if (Str /= Vstr ("0")) then
Tstring.Put (Def_File, Str);
Text_Io.Put (Def_File, " : constant := ");
Int_Io.Put (Def_File, Lastsc, 1);
Text_Io.Put_Line (Def_File, ";");
end if;
Lastsc := Lastsc + 1;
if (Lastsc >= Current_Max_Scs) then
Current_Max_Scs := Current_Max_Scs + Max_Scs_Increment;
Num_Reallocs := Num_Reallocs + 1;
Reallocate_Integer_Array (Scset, Current_Max_Scs);
Reallocate_Integer_Array (Scbol, Current_Max_Scs);
Reallocate_Boolean_Array (Scxclu, Current_Max_Scs);
Reallocate_Boolean_Array (Sceof, Current_Max_Scs);
Reallocate_Vstring_Array (Scname, Current_Max_Scs);
Reallocate_Integer_Array (Actvsc, Current_Max_Scs);
end if;
Scname (Lastsc) := Str;
Addsym (Scname (Lastsc), Nul, Lastsc, Sctbl,
Start_Cond_Hash_Size, Result);
if (Result) then
Misc.Aflexerror ("start condition " & Str & " declared twice");
end if;
Scset (Lastsc) := Nfa.Mkstate (Sym_Epsilon);
Scbol (Lastsc) := Nfa.Mkstate (Sym_Epsilon);
Scxclu (Lastsc) := Xcluflg;
Sceof (Lastsc) := False;
end Scinstal;
-- sclookup - lookup the number associated with a start condition
function Sclookup (Str : in Vstring) return Integer is
begin
return Findsym (Str, Sctbl, Start_Cond_Hash_Size).Int_Val;
end Sclookup;
end Sym;
-- Copyright (c) 1990 Regents of the University of California.
-- All rights reserved.
--
-- This software was developed by John Self of the Arcadia project
-- at the University of California, Irvine.
--
-- Redistribution and use in source and binary forms are permitted
-- provided that the above copyright notice and this paragraph are
-- duplicated in all such forms and that any documentation,
-- advertising materials, and other materials related to such
-- distribution and use acknowledge that the software was developed
-- by the University of California, Irvine. The name of the
-- University may not be used to endorse or promote products derived
-- from this software without specific prior written permission.
-- THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
-- IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
-- WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-- TITLE symbol table routines
-- AUTHOR: John Self (UCI)
-- DESCRIPTION implements only a simple symbol table using open hashing
-- NOTES could be faster, but it isn't used much
-- $Header: /co/ua/self/arcadia/aflex/ada/src/RCS/symS.a,v 1.4 90/01/12 15:20:42 self Exp Locker: self $