Cooper_Engineering_a_Compiler(Second Edition) (1157546), страница 3
Текст из файла (страница 3)
. . . . . . . . . . . . . .4.3.1 Evaluation Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4.3.2 Circularity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4.3.3 Extended Examples .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4.3.4 Problems with the Attribute-Grammar Approach . . . . . . . . . . .Ad Hoc Syntax-Directed Translation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4.4.1 Implementing Ad Hoc Syntax-Directed Translation . . . . . . . .4.4.2 Examples . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Advanced Topics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4.5.1 Harder Problems in Type Inference . . . . . . . . . . . . . . . .
. . . . . . . . . .4.5.2 Changing Associativity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Summary and Perspective . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Chapter Notes . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .161164165170182186187187194198199202211211213215216217CHAPTER 5 Intermediate Representations . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2215.15.25.35.4Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5.1.1 A Taxonomy of Intermediate Representations . . . . . . . . . . . . . .Graphical IRs . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5.2.1 Syntax-Related Trees . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5.2.2 Graphs . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Linear IRs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5.3.1 Stack-Machine Code . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5.3.2 Three-Address Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5.3.3 Representing Linear Codes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5.3.4 Building a Control-Flow Graph from a Linear Code . . . . .
. . .Mapping Values to Names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5.4.1 Naming Temporary Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5.4.2 Static Single-Assignment Form . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .5.4.3 Memory Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .221223226226230235237237238241243244246250xii Contents5.55.6Symbol Tables . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5.5.1 Hash Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5.5.2 Building a Symbol Table . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5.5.3 Handling Nested Scopes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5.5.4 The Many Uses for Symbol Tables . . . . . . . . . . . . . . . . . . . . . . . . . .5.5.5 Other Uses for Symbol Table Technology . . .
. . . . . . . . . . . . . . . .Summary and Perspective . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Chapter Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Exercises . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .253254255256261263264264265CHAPTER 6 The Procedure Abstraction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . 2696.16.26.36.46.56.66.7Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Procedure Calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . .Name Spaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6.3.1 Name Spaces of Algol-like Languages . . . . . . . . . . . . . . . . . . . . . .6.3.2 Runtime Structures to Support Algol-likeLanguages . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6.3.3 Name Spaces of Object-Oriented Languages . . . . . . . . . . . . . . . .6.3.4 Runtime Structures to Support Object-OrientedLanguages . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Communicating Values Between Procedures . . . . . . . . . . . . . . . . . . . . . . .6.4.1 Passing Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6.4.2 Returning Values .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6.4.3 Establishing Addressability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Standardized Linkages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . .Advanced Topics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6.6.1 Explicit Heap Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6.6.2 Implicit Deallocation . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Summary and Perspective . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Chapter Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .269272276276280285290297297301301308312313317322323324CHAPTER 7 Code Shape . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3317.17.27.3Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Assigning Storage Locations . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7.2.1 Placing Runtime Data Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7.2.2 Layout for Data Areas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . .7.2.3 Keeping Values in Registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Arithmetic Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7.3.1 Reducing Demand for Registers . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .331334335336340342344Contents xiii7.3.2 Accessing Parameter Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7.3.3 Function Calls in an Expression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7.3.4 Other Arithmetic Operators . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7.3.5 Mixed-Type Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7.3.6 Assignment as an Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7.4 Boolean and Relational Operators . . . . . . .