compilers
play

Compilers Scope Alex Aiken Scope Matching identifier declarations - PowerPoint PPT Presentation

Compilers Scope Alex Aiken Scope Matching identifier declarations with uses Important static analysis step in most languages Including COOL! Alex Aiken Scope Example 1 let y: String abc in y + 3 Example 2 let y:


  1. Compilers Scope Alex Aiken

  2. Scope • Matching identifier declarations with uses – Important static analysis step in most languages – Including COOL! Alex Aiken

  3. Scope • Example 1 let y: String  “ abc ” in y + 3 • Example 2 let y: Int in x + 3 Alex Aiken

  4. Scope • The scope of an identifier is the portion of a program in which that identifier is accessible • The same identifier may refer to different things in different parts of the program – Different scopes for same name don’t overlap • An identifier may have restricted scope Alex Aiken

  5. Scope • Most languages have static scope – Scope depends only on the program text, not run-time behavior – Cool has static scope • A few languages are dynamically scoped – Lisp, SNOBOL – Lisp has changed to mostly static scoping – Scope depends on execution of the program Alex Aiken

  6. Scope let x: Int <- 0 in { x; let x: Int <- 1 in x; x; } Alex Aiken

  7. Scope • A dynamically-scoped variable refers to the closest enclosing binding in the execution of the program • Example g(y) = let a  4 in f(3); f(x) = a; • More about dynamic scope later . . . Alex Aiken

  8. Scope • Cool identifier bindings are introduced by – Class declarations (introduce class names) – Method definitions (introduce method names) – Let expressions (introduce object id’s) – Formal parameters (introduce object id’s) – Attribute definitions (introduce object id’s) – Case expressions (introduce object id’s) Alex Aiken

  9. Scope • Not all identifiers follow the most-closely nested rule • For example, class definitions in Cool – Cannot be nested – Are globally visible throughout the program • A class name can be used before it is defined Alex Aiken

  10. Scope Class Foo { . . . let y: Bar in . . . }; Class Bar { . . . }; Alex Aiken

  11. Scope Attribute names are global within the class in which they are defined Class Foo { f(): Int { a }; a: Int  0; } Alex Aiken

  12. Scope • Method names have complex rules • A method need not be defined in the class in which it is used, but in some parent class • Methods may also be redefined (overridden) Alex Aiken

  13. Scope Choose whether or not each variable use binds to the name on the given line 1 Class Foo { 2 f(x: Int): Int { 3 { 4 let x: Int <- 4 in { Line 6 binds to line 2 6 x; 7 let x: Int <- 7 in 8 x; Line 9 binds to line 7 9 x; 10 }; Line 11 binds to line 2 11 x; 12 }; 13 }; Line 11 binds to line 14 14 x: Int <- 14; 15 }

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend