====== Access types ======
===== Definitions =====
==== access_type_definition ====
''access [[.:bnf#subtype_indication]]''
By declaring an access type an access type is declared which can later be used for declaring an index variable.
==== incomplete_type_declaration ====
''type [[.:bnf#identifier]]''
By giving an incomplete type declaration it is possible to model recursive structures. The complete type declaration has to be made in the same declarative range.
===== Examples =====
Access types //address// and //buffer_ptr// are declared. //memory// and //buffer// are target //types// .
TYPE address IS ACCESS memory ;
TYPE buffer_ptr IS ACCESS buffer ;
----
A recursive structure is created. At first type //cell// is declared incompletely. As a consequence the access type //link// is declared on the type //cell// .
Afterwards type //cell// is declared completely as Record. The elements //succ// and //pred// are declared as index types. By doing so an interlinked list can be created in which every element receives an index to both its predecessor and its successor.
TYPE cell ;
TYPE link IS ACCESS cell ;
TYPE cell IS
RECORD
value : integer ;
succ : link ;
pred : link ;
END RECORD ;