80 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
.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
 | 
						|
  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 ;
 | 
						|
.DE
 |