|
|
DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 26624 (0x6800)
Types: Ada Source
Notes: 03_class, FILE, R1k_Segment, e3_tag, package Misc_Defs, seg_030aa5
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
└─⟦cfc2e13cd⟧ »Space Info Vol 2«
└─⟦this⟧
with Text_Io, Tstring;
use Text_Io, Tstring;
package Misc_Defs is
-- various definitions that were in parse.y
Pat, Scnum, Eps, Headcnt, Trailcnt, Anyccl, Lastchar, Actvp, Rulelen :
Integer;
Trlcontxt, Xcluflg, Cclsorted, Varlength, Variable_Trail_Rule : Boolean;
Madeany : Boolean := False; -- whether we've made the '.' character class
Previous_Continued_Action :
Boolean; -- whether the previous rule's action wa
-- s '|'
-- maximum line length we'll have to deal with
Maxline : constant Integer := 1024;
-- These typees are needed for the various allocators.
type Unbounded_Int_Array is array (Integer range <>) of Integer;
type Int_Ptr is access Unbounded_Int_Array;
type Int_Star is access Integer;
type Unbounded_Int_Star_Array is array (Integer range <>) of Int_Ptr;
type Int_Star_Ptr is access Unbounded_Int_Star_Array;
type Unbounded_Vstring_Array is array (Integer range <>) of Vstring;
type Vstring_Ptr is access Unbounded_Vstring_Array;
type Boolean_Array is array (Integer range <>) of Boolean;
type Boolean_Ptr is access Boolean_Array;
type Char_Array is array (Integer range <>) of Character;
type Char_Ptr is access Char_Array;
-- different types of states; values are useful as masks, as well, for
-- routines like check_trailing_context()
type State_Enum is (State_Normal, State_Trailing_Context);
type Unbounded_State_Enum_Array is array (Integer range <>) of State_Enum;
type State_Enum_Ptr is access Unbounded_State_Enum_Array;
-- different types of rules
type Rule_Enum is (Rule_Normal, Rule_Variable);
type Unbounded_Rule_Enum_Array is array (Integer range <>) of Rule_Enum;
type Rule_Enum_Ptr is access Unbounded_Rule_Enum_Array;
type Dfaacc_Type is
record
Dfaacc_Set : Int_Ptr;
Dfaacc_State : Integer;
end record;
type Unbounded_Dfaacc_Array is array (Integer range <>) of Dfaacc_Type;
type Dfaacc_Ptr is access Unbounded_Dfaacc_Array;
-- maximum size of file name
Filenamesize : constant Integer := 1024;
function Min (X, Y : in Integer) return Integer;
function Max (X, Y : in Integer) return Integer;
-- special chk[] values marking the slots taking by end-of-buffer and action
-- numbers
Eob_Position : constant Integer := -1;
Action_Position : constant Integer := -2;
-- number of data items per line for -f output
Numdataitems : constant Integer := 10;
-- number of lines of data in -f output before inserting a blank line for
-- readability.
Numdatalines : constant Integer := 10;
-- transition_struct_out() definitions
Trans_Struct_Print_Length : constant Integer := 15;
-- returns true if an nfa state has an epsilon out-transition slot
-- that can be used. This definition is currently not used.
function Free_Epsilon (State : in Integer) return Boolean;
-- returns true if an nfa state has an epsilon out-transition character
-- and both slots are free
function Super_Free_Epsilon (State : in Integer) return Boolean;
-- maximum number of NFA states that can comprise a DFA state. It's real
-- big because if there's a lot of rules, the initial state will have a
-- huge epsilon closure.
Initial_Max_Dfa_Size : constant Integer := 750;
Max_Dfa_Size_Increment : constant Integer := 750;
-- a note on the following masks. They are used to mark accepting numbers
-- as being special. As such, they implicitly limit the number of accepting
-- numbers (i.e., rules) because if there are too many rules the rule numbers
-- will overload the mask bits. Fortunately, this limit is \large/ (0x2000 ==
-- 8192) so unlikely to actually cause any problems. A check is made in
-- new_rule() to ensure that this limit is not reached.
-- mask to mark a trailing context accepting number
-- #define YY_TRAILING_MASK 0x2000
Yy_Trailing_Mask : constant Integer := 16#2000#;
-- mask to mark the accepting number of the "head" of a trailing context rule
-- #define YY_TRAILING_HEAD_MASK 0x4000
Yy_Trailing_Head_Mask : constant Integer := 16#4000#;
-- maximum number of rules, as outlined in the above note
Max_Rule : constant Integer := Yy_Trailing_Mask - 1;
-- NIL must be 0. If not, its special meaning when making equivalence classes
-- (it marks the representative of a given e.c.) will be unidentifiable
Nil : constant Integer := 0;
Jam : constant Integer := -1; -- to mark a missing DFA transition
No_Transition : constant Integer := Nil;
Unique : constant Integer := -1; -- marks a symbol as an e.c. representative
Infinity : constant Integer := -1; -- for x{5,} constructions
-- size of input alphabet - should be size of ASCII set
Csize : constant Integer := 127;
Initial_Max_Ccls : constant Integer :=
100; -- max number of unique character
-- classes
Max_Ccls_Increment : constant Integer := 100;
-- size of table holding members of character classes
Initial_Max_Ccl_Tbl_Size : constant Integer := 500;
Max_Ccl_Tbl_Size_Increment : constant Integer := 250;
Initial_Max_Rules : constant Integer := 100;
-- default maximum number of rules
Max_Rules_Increment : constant Integer := 100;
Initial_Mns : constant Integer :=
2000; -- default maximum number of nfa stat
-- es
Mns_Increment : constant Integer := 1000; -- amount to bump above by if it's
-- not enough
Initial_Max_Dfas : constant Integer :=
1000; -- default maximum number of dfa
-- states
Max_Dfas_Increment : constant Integer := 1000;
Jamstate_Const : constant Integer := -32766; -- marks a reference to the sta
-- te that always jams
-- enough so that if it's subtracted from an NFA state number, the result
-- is guaranteed to be negative
Marker_Difference : constant Integer := 32000;
Maximum_Mns : constant Integer := 31999;
-- maximum number of nxt/chk pairs for non-templates
Initial_Max_Xpairs : constant Integer := 2000;
Max_Xpairs_Increment : constant Integer := 2000;
-- maximum number of nxt/chk pairs needed for templates
Initial_Max_Template_Xpairs : constant Integer := 2500;
Max_Template_Xpairs_Increment : constant Integer := 2500;
Sym_Epsilon : constant Integer :=
0; -- to mark transitions on the symbol eps
-- ilon
Initial_Max_Scs : constant Integer :=
40; -- maximum number of start conditio
-- ns
Max_Scs_Increment : constant Integer := 40; -- amount to bump by if it's not
-- enough
One_Stack_Size : constant Integer :=
500; -- stack of states with only one ou
-- t-transition
Same_Trans : constant Integer := -1; -- transition is the same as "default"
-- entry for state
-- the following percentages are used to tune table compression:
--
-- the percentage the number of out-transitions a state must be of the
-- number of equivalence classes in order to be considered for table
-- compaction by using protos
Proto_Size_Percentage : constant Integer := 15;
-- the percentage the number of homogeneous out-transitions of a state
-- must be of the number of total out-transitions of the state in order
-- that the state's transition table is first compared with a potential
-- template of the most common out-transition instead of with the first
--proto in the proto queue
Check_Com_Percentage : constant Integer := 50;
-- the percentage the number of differences between a state's transition
-- table and the proto it was first compared with must be of the total
-- number of out-transitions of the state in order to keep the first
-- proto as a good match and not search any further
First_Match_Diff_Percentage : constant Integer := 10;
-- the percentage the number of differences between a state's transition
-- table and the most similar proto must be of the state's total number
-- of out-transitions to use the proto as an acceptable close match
Acceptable_Diff_Percentage : constant Integer := 50;
-- the percentage the number of homogeneous out-transitions of a state
-- must be of the number of total out-transitions of the state in order
-- to consider making a template from the state
Template_Same_Percentage : constant Integer := 60;
-- the percentage the number of differences between a state's transition
-- table and the most similar proto must be of the state's total number
-- of out-transitions to create a new proto from the state
New_Proto_Diff_Percentage : constant Integer := 20;
-- the percentage the total number of out-transitions of a state must be
-- of the number of equivalence classes in order to consider trying to
-- fit the transition table into "holes" inside the nxt/chk table.
Interior_Fit_Percentage : constant Integer := 15;
-- size of region set aside to cache the complete transition table of
-- protos on the proto queue to enable quick comparisons
Prot_Save_Size : constant Integer := 2000;
Msp : constant Integer :=
50; -- maximum number of saved protos (protos on th
-- e proto queue)
-- maximum number of out-transitions a state can have that we'll rummage
-- around through the interior of the internal fast table looking for a
-- spot for it
Max_Xtions_Full_Interior_Fit : constant Integer := 4;
-- maximum number of rules which will be reported as being associated
-- with a DFA state
Max_Assoc_Rules : constant Integer := 100;
-- number that, if used to subscript an array, has a good chance of producing
-- an error; should be small enough to fit into a short
Bad_Subscript : constant Integer := -32767;
-- Declarations for global variables.
-- variables for symbol tables:
-- sctbl - start-condition symbol table
-- ndtbl - name-definition symbol table
-- ccltab - character class text symbol table
type Hash_Entry;
type Hash_Link is access Hash_Entry;
type Hash_Entry is
record
Prev, Next : Hash_Link;
Name, Str_Val : Vstring;
Int_Val : Integer;
end record;
type Hash_Table is array (Integer range <>) of Hash_Link;
Name_Table_Hash_Size : constant Integer := 101;
Start_Cond_Hash_Size : constant Integer := 101;
Ccl_Hash_Size : constant Integer := 101;
subtype Ndtbl_Type is Hash_Table (0 .. Name_Table_Hash_Size - 1);
Ndtbl : Ndtbl_Type;
subtype Sctbl_Type is Hash_Table (0 .. Start_Cond_Hash_Size - 1);
Sctbl : Sctbl_Type;
subtype Ccltab_Type is Hash_Table (0 .. Ccl_Hash_Size);
Ccltab : Ccltab_Type;
-- variables for flags:
-- printstats - if true (-v), dump statistics
-- syntaxerror - true if a syntax error has been found
-- eofseen - true if we've seen an eof in the input file
-- ddebug - if true (-d), make a "debug" scanner
-- trace - if true (-T), trace processing
-- spprdflt - if true (-s), suppress the default rule
-- interactive - if true (-I), generate an interactive scanner
-- caseins - if true (-i), generate a case-insensitive scanner
-- useecs - if true (-ce flag), use equivalence classes
-- fulltbl - if true (-cf flag), don't compress the DFA state table
-- usemecs - if true (-cm flag), use meta-equivalence classes
-- gen_line_dirs - if true (i.e., no -L flag), generate #line directives
-- performance_report - if true (i.e., -p flag), generate a report relating
-- to scanner performance
-- backtrack_report - if true (i.e., -b flag), generate "lex.backtrack" file
-- listing backtracking states
-- continued_action - true if this rule's action is to "fall through" to
-- the next rule's action (i.e., the '|' action)
Printstats, Ddebug, Spprdflt, Interactive, Caseins, Useecs,
Fulltbl, Usemecs, Gen_Line_Dirs, Performance_Report,
Backtrack_Report, Trace, Eofseen, Continued_Action : Boolean;
Syntaxerror : Boolean;
-- variables used in the aflex input routines:
-- datapos - characters on current output line
-- dataline - number of contiguous lines of data in current data
-- statement. Used to generate readable -f output
-- skelfile - the skeleton file
-- yyin - input file
-- temp_action_file - temporary file to hold actions
-- backtrack_file - file to summarize backtracking states to
-- infilename - name of input file
-- linenum - current input line number
Datapos, Dataline, Linenum : Integer;
Skelfile, Yyin, Temp_Action_File, Backtrack_File, Def_File : File_Type;
Infilename : Vstring;
-- variables for stack of states having only one out-transition:
-- onestate - state number
-- onesym - transition symbol
-- onenext - target state
-- onedef - default base entry
-- onesp - stack pointer
Onestate, Onesym, Onenext, Onedef :
array (0 .. One_Stack_Size - 1) of Integer;
Onesp : Integer;
-- variables for nfa machine data:
-- current_mns - current maximum on number of NFA states
-- num_rules - number of the last accepting state; also is number of
-- rules created so far
-- current_max_rules - current maximum number of rules
-- lastnfa - last nfa state number created
-- firstst - physically the first state of a fragment
-- lastst - last physical state of fragment
-- finalst - last logical state of fragment
-- transchar - transition character
-- trans1 - transition state
-- trans2 - 2nd transition state for epsilons
-- accptnum - accepting number
-- assoc_rule - rule associated with this NFA state (or 0 if none)
-- state_type - a STATE_xxx type identifying whether the state is part
-- of a normal rule, the leading state in a trailing context
-- rule (i.e., the state which marks the transition from
-- recognizing the text-to-be-matched to the beginning of
-- the trailing context), or a subsequent state in a trailing
-- context rule
-- rule_type - a RULE_xxx type identifying whether this a a ho-hum
-- normal rule or one which has variable head & trailing
-- context
-- rule_linenum - line number associated with rule
Current_Mns, Num_Rules, Current_Max_Rules, Lastnfa : Integer;
Firstst, Lastst, Finalst, Transchar, Trans1, Trans2 : Int_Ptr;
Accptnum, Assoc_Rule, Rule_Linenum : Int_Ptr;
Rule_Type : Rule_Enum_Ptr;
State_Type : State_Enum_Ptr;
-- global holding current type of state we're making
Current_State_Enum : State_Enum;
-- true if the input rules include a rule with both variable-length head
-- and trailing context, false otherwise
Variable_Trailing_Context_Rules : Boolean;
-- variables for protos:
-- numtemps - number of templates created
-- numprots - number of protos created
-- protprev - backlink to a more-recently used proto
-- protnext - forward link to a less-recently used proto
-- prottbl - base/def table entry for proto
-- protcomst - common state of proto
-- firstprot - number of the most recently used proto
-- lastprot - number of the least recently used proto
-- protsave contains the entire state array for protos
Numtemps, Numprots, Firstprot, Lastprot : Integer;
Protprev, Protnext, Prottbl, Protcomst : array (0 .. Msp - 1) of Integer;
Protsave : array (0 .. Prot_Save_Size - 1) of Integer;
-- variables for managing equivalence classes:
-- numecs - number of equivalence classes
-- nextecm - forward link of Equivalence Class members
-- ecgroup - class number or backward link of EC members
-- nummecs - number of meta-equivalence classes (used to compress
-- templates)
-- tecfwd - forward link of meta-equivalence classes members
-- * tecbck - backward link of MEC's
Numecs, Nummecs : Integer;
subtype C_Size_Array is Unbounded_Int_Array (0 .. Csize);
type C_Size_Bool_Array is array (0 .. Csize) of Boolean;
Nextecm, Ecgroup, Tecfwd, Tecbck : C_Size_Array;
-- variables for start conditions:
-- lastsc - last start condition created
-- current_max_scs - current limit on number of start conditions
-- scset - set of rules active in start condition
-- scbol - set of rules active only at the beginning of line in a s.c.
-- scxclu - true if start condition is exclusive
-- sceof - true if start condition has EOF rule
-- scname - start condition name
-- actvsc - stack of active start conditions for the current rule
Lastsc, Current_Max_Scs : Integer;
Scset, Scbol : Int_Ptr;
Scxclu, Sceof : Boolean_Ptr;
Actvsc : Int_Ptr;
Scname : Vstring_Ptr;
-- variables for dfa machine data:
-- current_max_dfa_size - current maximum number of NFA states in DFA
-- current_max_xpairs - current maximum number of non-template xtion pairs
-- current_max_template_xpairs - current maximum number of template pairs
-- current_max_dfas - current maximum number DFA states
-- lastdfa - last dfa state number created
-- nxt - state to enter upon reading character
-- chk - check value to see if "nxt" applies
-- tnxt - internal nxt table for templates
-- base - offset into "nxt" for given state
-- def - where to go if "chk" disallows "nxt" entry
-- tblend - last "nxt/chk" table entry being used
-- firstfree - first empty entry in "nxt/chk" table
-- dss - nfa state set for each dfa
-- dfasiz - size of nfa state set for each dfa
-- dfaacc - accepting set for each dfa state (or accepting number, if
-- -r is not given)
-- accsiz - size of accepting set for each dfa state
-- dhash - dfa state hash value
-- numas - number of DFA accepting states created; note that this
-- is not necessarily the same value as num_rules, which is the analogous -- value for the NFA
-- numsnpairs - number of state/nextstate transition pairs
-- jambase - position in base/def where the default jam table starts
-- jamstate - state number corresponding to "jam" state
-- end_of_buffer_state - end-of-buffer dfa state number
Current_Max_Dfa_Size, Current_Max_Xpairs : Integer;
Current_Max_Template_Xpairs, Current_Max_Dfas : Integer;
Lastdfa, Lasttemp : Integer;
Nxt, Chk, Tnxt : Int_Ptr;
Base, Def, Dfasiz : Int_Ptr;
Tblend, Firstfree : Integer;
Dss : Int_Star_Ptr;
Dfaacc : Dfaacc_Ptr;
-- type declaration for dfaacc_type moved above
Accsiz, Dhash : Int_Ptr;
End_Of_Buffer_State, Numsnpairs, Jambase, Jamstate, Numas : Integer;
-- variables for ccl information:
-- lastccl - ccl index of the last created ccl
-- current_maxccls - current limit on the maximum number of unique ccl's
-- cclmap - maps a ccl index to its set pointer
-- ccllen - gives the length of a ccl
-- cclng - true for a given ccl if the ccl is negated
-- cclreuse - counts how many times a ccl is re-used
-- current_max_ccl_tbl_size - current limit on number of characters needed
--\x09to represent the unique ccl's
-- ccltbl - holds the characters in each ccl - indexed by cclmap
Current_Max_Ccl_Tbl_Size, Lastccl, Current_Maxccls, Cclreuse : Integer;
Cclmap, Ccllen, Cclng : Int_Ptr;
Ccltbl : Char_Ptr;
-- variables for miscellaneous information:
-- starttime - real-time when we started
-- endtime - real-time when we ended
-- nmstr - last NAME scanned by the scanner
-- sectnum - section number currently being parsed
-- nummt - number of empty nxt/chk table entries
-- hshcol - number of hash collisions detected by snstods
-- dfaeql - number of times a newly created dfa was equal to an old one
-- numeps - number of epsilon NFA states created
-- eps2 - number of epsilon states which have 2 out-transitions
-- num_reallocs - number of times it was necessary to realloc() a group
--\x09\x09 of arrays
-- tmpuses - number of DFA states that chain to templates
-- totnst - total number of NFA states used to make DFA states
-- peakpairs - peak number of transition pairs we had to store internally
-- numuniq - number of unique transitions
-- numdup - number of duplicate transitions
-- hshsave - number of hash collisions saved by checking number of states
-- num_backtracking - number of DFA states requiring back-tracking
-- bol_needed - whether scanner needs beginning-of-line recognition
Nmstr : Vstring;
Sectnum, Nummt, Hshcol, Dfaeql, Numeps, Eps2, Num_Reallocs : Integer;
Tmpuses, Totnst, Peakpairs, Numuniq, Numdup, Hshsave : Integer;
Num_Backtracking : Integer;
Bol_Needed : Boolean;
function Allocate_Integer_Array (Size : in Integer) return Int_Ptr;
function Allocate_Int_Ptr_Array (Size : in Integer) return Int_Star_Ptr;
function Allocate_Vstring_Array (Size : in Integer) return Vstring_Ptr;
function Allocate_Dfaacc_Union (Size : in Integer) return Dfaacc_Ptr;
function Allocate_Character_Array (Size : in Integer) return Char_Ptr;
function Allocate_Rule_Enum_Array (Size : in Integer) return Rule_Enum_Ptr;
function Allocate_State_Enum_Array
(Size : in Integer) return State_Enum_Ptr;
function Allocate_Boolean_Array (Size : in Integer) return Boolean_Ptr;
procedure Reallocate_Integer_Array
(Arr : in out Int_Ptr; Size : in Integer);
procedure Reallocate_Int_Ptr_Array
(Arr : in out Int_Star_Ptr; Size : in Integer);
procedure Reallocate_Vstring_Array
(Arr : in out Vstring_Ptr; Size : in Integer);
procedure Reallocate_Dfaacc_Union
(Arr : in out Dfaacc_Ptr; Size : in Integer);
procedure Reallocate_Character_Array
(Arr : in out Char_Ptr; Size : in Integer);
procedure Reallocate_Rule_Enum_Array
(Arr : in out Rule_Enum_Ptr; Size : in Integer);
procedure Reallocate_State_Enum_Array
(Arr : in out State_Enum_Ptr; Size : in Integer);
procedure Reallocate_Boolean_Array
(Arr : in out Boolean_Ptr; Size : in Integer);
end Misc_Defs;
-- 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 NFA construction routines
-- AUTHOR: John Self (UCI)
-- DESCRIPTION builds the NFA.
-- NOTES this file mirrors flex as closely as possible.
-- $Header: /co/ua/self/arcadia/aflex/ada/src/RCS/nfaB.a,v 1.6 90/01/12 15:20:27 self Exp Locker: self $
nblk1=19
nid=0
hdr6=32
[0x00] rec0=1a rec1=00 rec2=01 rec3=064
[0x01] rec0=19 rec1=00 rec2=02 rec3=020
[0x02] rec0=1e rec1=00 rec2=03 rec3=04c
[0x03] rec0=15 rec1=00 rec2=04 rec3=018
[0x04] rec0=19 rec1=00 rec2=05 rec3=00a
[0x05] rec0=18 rec1=00 rec2=06 rec3=04a
[0x06] rec0=1a rec1=00 rec2=07 rec3=032
[0x07] rec0=14 rec1=00 rec2=08 rec3=082
[0x08] rec0=16 rec1=00 rec2=09 rec3=062
[0x09] rec0=18 rec1=00 rec2=0a rec3=03a
[0x0a] rec0=1f rec1=00 rec2=0b rec3=05e
[0x0b] rec0=16 rec1=00 rec2=0c rec3=056
[0x0c] rec0=13 rec1=00 rec2=0d rec3=062
[0x0d] rec0=1c rec1=00 rec2=0e rec3=038
[0x0e] rec0=11 rec1=00 rec2=0f rec3=038
[0x0f] rec0=1a rec1=00 rec2=10 rec3=054
[0x10] rec0=16 rec1=00 rec2=11 rec3=064
[0x11] rec0=19 rec1=00 rec2=12 rec3=004
[0x12] rec0=12 rec1=00 rec2=13 rec3=002
[0x13] rec0=18 rec1=00 rec2=14 rec3=01e
[0x14] rec0=16 rec1=00 rec2=15 rec3=032
[0x15] rec0=14 rec1=00 rec2=16 rec3=028
[0x16] rec0=1d rec1=00 rec2=17 rec3=006
[0x17] rec0=18 rec1=00 rec2=18 rec3=008
[0x18] rec0=0d rec1=00 rec2=19 rec3=000
tail 0x2172a401e84a64e918732 0x42a00088462060003