Example of Structure Reference
Given the preceding declarations, the reference
people[i].birth.day
would be processed as follows:
| Reference | Expression | Type | |
| people[i] | aref(people, (i-1)*32) | person | |
| = | aref(people, -32 + i*32) | ||
| .birth | aref(people, (i-1)*32+16) | date | |
| = | aref(people, -16 + i*32) | ||
| .day | aref(people, (i-1)*32+16+4) | 1..31 | |
| = | aref(people, -12 + i*32) | ||
It is useful to think of structure descriptions in nested Lisp-like form. For example, the preceding declarations would yield the following type for the array people:
(ARRAY (.. 1 100)
(RECORD (NAME ALFA)
(SS INTEGER)
(BIRTH (RECORD
(MO (.. 1 12))
(DAY (.. 1 31))
(YEAR INTEGER)))))