84 lines
2.1 KiB
Plaintext
84 lines
2.1 KiB
Plaintext
.NH 2
|
|
External representation of the intermediate code
|
|
.PP
|
|
The syntax of the intermediate code was given
|
|
in the previous section.
|
|
In this section we will make some remarks about
|
|
the representation of the code in sequential files.
|
|
.sp
|
|
We use sequential files in order to avoid
|
|
the bookkeeping of complex file indices.
|
|
As a consequence of this decision
|
|
we can't store all components
|
|
of the intermediate code
|
|
in one file.
|
|
If a phase wishes to change some attribute
|
|
of a procedure,
|
|
or wants to add or delete entire procedures
|
|
(inline substitution may do the latter),
|
|
the procedure table will only be fully updated
|
|
after the entire EM text has been scanned.
|
|
Yet, the next phase undoubtedly wants
|
|
to read the procedure table before it
|
|
starts working on the EM text.
|
|
Hence there is an ordering problem, which
|
|
can be solved easily by putting the
|
|
procedure table in a separate file.
|
|
Similarly, the data block table is kept
|
|
in a file of its own.
|
|
.PP
|
|
The control flow graphs (CFGs) could be mixed
|
|
with the EM text.
|
|
Rather, we have chosen to put them
|
|
in a separate file too.
|
|
The control flow graph file should be regarded as a
|
|
file that imposes some structure on the EM-text file,
|
|
just as an overhead sheet containing a picture
|
|
of a Flow Chart may be put on an overhead sheet
|
|
containing statements.
|
|
The loop tables are also put in the CFG file.
|
|
A loop imposes an extra structure on the
|
|
CFGs and hence on the EM text.
|
|
So there are four files:
|
|
.IP -
|
|
the EM-text file
|
|
.IP -
|
|
the procedure table file
|
|
.IP -
|
|
the object table file
|
|
.IP -
|
|
the CFG and loop tables file
|
|
.LP
|
|
Every table is preceded by its length, in order to
|
|
tell where it ends.
|
|
The CFG file also contains the number of instructions of
|
|
every basic block,
|
|
indicating which part of the EM text belongs
|
|
to that block.
|
|
.DS
|
|
.UL syntax
|
|
.TS
|
|
lw(1i) l l.
|
|
intermediate_code:
|
|
object_table_file
|
|
proctable_file
|
|
em_text_file
|
|
cfg_file ;
|
|
object_table_file:
|
|
LENGTH -- number of objects
|
|
object_table ;
|
|
proctable_file:
|
|
LENGTH -- number of procedures
|
|
procedure_table ;
|
|
em_text_file:
|
|
em_text ;
|
|
cfg_file:
|
|
{per_proc} ; -- one for every procedure
|
|
per_proc:
|
|
BLENGTH -- number of basic blocks
|
|
LLENGTH -- number of loops
|
|
control_flow_graph
|
|
looptable ;
|
|
.TE
|
|
.DE
|