Preface |
|
ix | |
|
Part I Fundamentals of Compilation |
|
|
|
|
3 | (11) |
|
|
4 | (1) |
|
|
5 | (2) |
|
Data structures for tree languages |
|
|
7 | (7) |
|
|
14 | (24) |
|
|
15 | (1) |
|
|
16 | (3) |
|
|
19 | (3) |
|
Nondeterministic finite automata |
|
|
22 | (6) |
|
ML-Lex: a lexical analyzer generator |
|
|
28 | (10) |
|
|
38 | (49) |
|
|
40 | (5) |
|
|
45 | (10) |
|
|
55 | (13) |
|
|
68 | (7) |
|
|
75 | (12) |
|
|
87 | (16) |
|
|
87 | (5) |
|
|
92 | (11) |
|
|
103 | (21) |
|
|
103 | (8) |
|
Bindings for the Tiger compiler |
|
|
111 | (3) |
|
Type-checking expressions |
|
|
114 | (3) |
|
Type-checking declarations |
|
|
117 | (7) |
|
|
124 | (24) |
|
|
126 | (8) |
|
Frames in the Tiger compiler |
|
|
134 | (14) |
|
Translation to Intermediate Code |
|
|
148 | (25) |
|
Intermediate representation trees |
|
|
149 | (3) |
|
|
152 | (15) |
|
|
167 | (6) |
|
|
173 | (13) |
|
|
174 | (5) |
|
Taming conditional branches |
|
|
179 | (7) |
|
|
186 | (25) |
|
Algorithms for instruction selection |
|
|
189 | (8) |
|
|
197 | (3) |
|
Instruction selection for the Tiger compiler |
|
|
200 | (11) |
|
|
211 | (17) |
|
Solution of dataflow equations |
|
|
213 | (9) |
|
Liveness in the Tiger compiler |
|
|
222 | (6) |
|
|
228 | (30) |
|
Coloring by simplification |
|
|
229 | (3) |
|
|
232 | (4) |
|
|
236 | (5) |
|
Graph coloring implementation |
|
|
241 | (9) |
|
Register allocation for trees |
|
|
250 | (8) |
|
|
258 | (9) |
|
|
|
|
267 | (26) |
|
Mark-and-sweep collection |
|
|
267 | (5) |
|
|
272 | (2) |
|
|
274 | (5) |
|
|
279 | (2) |
|
|
281 | (3) |
|
|
284 | (1) |
|
Interface to the compiler |
|
|
285 | (8) |
|
Object-Oriented Languages |
|
|
293 | (16) |
|
|
293 | (3) |
|
Single inheritance of data fields |
|
|
296 | (2) |
|
|
298 | (2) |
|
|
300 | (4) |
|
Private fields and methods |
|
|
304 | (1) |
|
|
304 | (1) |
|
Optimizing object-oriented programs |
|
|
305 | (4) |
|
Functional Programming Languages |
|
|
309 | (35) |
|
A simple functional language |
|
|
310 | (2) |
|
|
312 | (1) |
|
|
313 | (7) |
|
|
320 | (6) |
|
|
326 | (3) |
|
|
329 | (2) |
|
|
331 | (13) |
|
|
344 | (33) |
|
|
345 | (8) |
|
|
353 | (10) |
|
Representation of polymorphic variables |
|
|
363 | (9) |
|
Resolution of static overloading |
|
|
372 | (5) |
|
|
377 | (27) |
|
Intermediate representation for flow analysis |
|
|
378 | (3) |
|
Various dataflow analyses |
|
|
381 | (5) |
|
Transformations using dataflow analysis |
|
|
386 | (1) |
|
Speeding up dataflow analysis |
|
|
387 | (9) |
|
|
396 | (8) |
|
|
404 | (23) |
|
|
407 | (5) |
|
Loop-invariant computations |
|
|
412 | (1) |
|
|
413 | (6) |
|
|
419 | (4) |
|
|
423 | (4) |
|
Static Single-Assignment Form |
|
|
427 | (41) |
|
|
430 | (8) |
|
Efficient computation of the dominator tree |
|
|
438 | (7) |
|
Optimization algorithms using SSA |
|
|
445 | (6) |
|
Arrays, pointers, and memory |
|
|
451 | (2) |
|
The control-dependence graph |
|
|
453 | (3) |
|
Converting back from SSA form |
|
|
456 | (2) |
|
A functional intermediate form |
|
|
458 | (10) |
|
Pipelining and Scheduling |
|
|
468 | (24) |
|
Loop scheduling without resource bounds |
|
|
472 | (4) |
|
Resource-bounded loop pipelining |
|
|
476 | (8) |
|
|
484 | (8) |
|
|
492 | (20) |
|
|
493 | (3) |
|
|
496 | (2) |
|
|
498 | (6) |
|
|
504 | (1) |
|
|
505 | (3) |
|
Garbage collection and the memory hierarchy |
|
|
508 | (4) |
|
Appendix: Tiger Language Reference Manual |
|
|
512 | (10) |
|
|
512 | (1) |
|
|
512 | (3) |
|
Variables and expressions |
|
|
515 | (4) |
|
|
519 | (1) |
|
|
520 | (2) |
Bibliography |
|
522 | (9) |
Index |
|
531 | |