lecture-21 - university of delawarecavazos/cisc672/lectures/lecture-21.pdf · title: lecture-21.ppt...
TRANSCRIPT
![Page 1: lecture-21 - University of Delawarecavazos/CISC672/lectures/Lecture-21.pdf · Title: lecture-21.ppt Author: John Cavazos Created Date: 12/2/2009 9:58:38 PM](https://reader035.vdocument.in/reader035/viewer/2022070108/60419b4dfd69ee623476e59b/html5/thumbnails/1.jpg)
Context-sensitive Analysis Part IV
Ad-hoc syntax-directed translation, Symbol Tables, andTypes
![Page 2: lecture-21 - University of Delawarecavazos/CISC672/lectures/Lecture-21.pdf · Title: lecture-21.ppt Author: John Cavazos Created Date: 12/2/2009 9:58:38 PM](https://reader035.vdocument.in/reader035/viewer/2022070108/60419b4dfd69ee623476e59b/html5/thumbnails/2.jpg)
Quiz
Name two differences between attribute grammars and ad-hoc syntax directed translation techniques?
![Page 3: lecture-21 - University of Delawarecavazos/CISC672/lectures/Lecture-21.pdf · Title: lecture-21.ppt Author: John Cavazos Created Date: 12/2/2009 9:58:38 PM](https://reader035.vdocument.in/reader035/viewer/2022070108/60419b4dfd69ee623476e59b/html5/thumbnails/3.jpg)
Example: Processing C Declarations
![Page 4: lecture-21 - University of Delawarecavazos/CISC672/lectures/Lecture-21.pdf · Title: lecture-21.ppt Author: John Cavazos Created Date: 12/2/2009 9:58:38 PM](https://reader035.vdocument.in/reader035/viewer/2022070108/60419b4dfd69ee623476e59b/html5/thumbnails/4.jpg)
Example: Processing C Declarations
![Page 5: lecture-21 - University of Delawarecavazos/CISC672/lectures/Lecture-21.pdf · Title: lecture-21.ppt Author: John Cavazos Created Date: 12/2/2009 9:58:38 PM](https://reader035.vdocument.in/reader035/viewer/2022070108/60419b4dfd69ee623476e59b/html5/thumbnails/5.jpg)
Example: Processing C Declarations
![Page 6: lecture-21 - University of Delawarecavazos/CISC672/lectures/Lecture-21.pdf · Title: lecture-21.ppt Author: John Cavazos Created Date: 12/2/2009 9:58:38 PM](https://reader035.vdocument.in/reader035/viewer/2022070108/60419b4dfd69ee623476e59b/html5/thumbnails/6.jpg)
Example: Processing C Declarations
![Page 7: lecture-21 - University of Delawarecavazos/CISC672/lectures/Lecture-21.pdf · Title: lecture-21.ppt Author: John Cavazos Created Date: 12/2/2009 9:58:38 PM](https://reader035.vdocument.in/reader035/viewer/2022070108/60419b4dfd69ee623476e59b/html5/thumbnails/7.jpg)
Example: Processing C Declarations
![Page 8: lecture-21 - University of Delawarecavazos/CISC672/lectures/Lecture-21.pdf · Title: lecture-21.ppt Author: John Cavazos Created Date: 12/2/2009 9:58:38 PM](https://reader035.vdocument.in/reader035/viewer/2022070108/60419b4dfd69ee623476e59b/html5/thumbnails/8.jpg)
Example: Processing C Declarations
![Page 9: lecture-21 - University of Delawarecavazos/CISC672/lectures/Lecture-21.pdf · Title: lecture-21.ppt Author: John Cavazos Created Date: 12/2/2009 9:58:38 PM](https://reader035.vdocument.in/reader035/viewer/2022070108/60419b4dfd69ee623476e59b/html5/thumbnails/9.jpg)
Example: Processing C Declarations
![Page 10: lecture-21 - University of Delawarecavazos/CISC672/lectures/Lecture-21.pdf · Title: lecture-21.ppt Author: John Cavazos Created Date: 12/2/2009 9:58:38 PM](https://reader035.vdocument.in/reader035/viewer/2022070108/60419b4dfd69ee623476e59b/html5/thumbnails/10.jpg)
Example: Processing C Declarations
![Page 11: lecture-21 - University of Delawarecavazos/CISC672/lectures/Lecture-21.pdf · Title: lecture-21.ppt Author: John Cavazos Created Date: 12/2/2009 9:58:38 PM](https://reader035.vdocument.in/reader035/viewer/2022070108/60419b4dfd69ee623476e59b/html5/thumbnails/11.jpg)
Example: Processing C Declarations
![Page 12: lecture-21 - University of Delawarecavazos/CISC672/lectures/Lecture-21.pdf · Title: lecture-21.ppt Author: John Cavazos Created Date: 12/2/2009 9:58:38 PM](https://reader035.vdocument.in/reader035/viewer/2022070108/60419b4dfd69ee623476e59b/html5/thumbnails/12.jpg)
Example: Processing C Declarations
![Page 13: lecture-21 - University of Delawarecavazos/CISC672/lectures/Lecture-21.pdf · Title: lecture-21.ppt Author: John Cavazos Created Date: 12/2/2009 9:58:38 PM](https://reader035.vdocument.in/reader035/viewer/2022070108/60419b4dfd69ee623476e59b/html5/thumbnails/13.jpg)
Example: Processing C Declarations
![Page 14: lecture-21 - University of Delawarecavazos/CISC672/lectures/Lecture-21.pdf · Title: lecture-21.ppt Author: John Cavazos Created Date: 12/2/2009 9:58:38 PM](https://reader035.vdocument.in/reader035/viewer/2022070108/60419b4dfd69ee623476e59b/html5/thumbnails/14.jpg)
Building a Symbol Table • Enter declaration information as processed • At end of declaration syntax, do some post
processing • Use table to check errors as parsing progresses
assumes table is global
![Page 15: lecture-21 - University of Delawarecavazos/CISC672/lectures/Lecture-21.pdf · Title: lecture-21.ppt Author: John Cavazos Created Date: 12/2/2009 9:58:38 PM](https://reader035.vdocument.in/reader035/viewer/2022070108/60419b4dfd69ee623476e59b/html5/thumbnails/15.jpg)
Symbol Table: Typical Uses • Define before use → lookup on reference • Dimension, type, ... → check as encountered • Type checking of expression → bottom-up walk
![Page 16: lecture-21 - University of Delawarecavazos/CISC672/lectures/Lecture-21.pdf · Title: lecture-21.ppt Author: John Cavazos Created Date: 12/2/2009 9:58:38 PM](https://reader035.vdocument.in/reader035/viewer/2022070108/60419b4dfd69ee623476e59b/html5/thumbnails/16.jpg)
Symbol Table: Typical Uses • Procedure interfaces are harder
→ Build a representation for parameter list & types
→ Create list of sites to check
![Page 17: lecture-21 - University of Delawarecavazos/CISC672/lectures/Lecture-21.pdf · Title: lecture-21.ppt Author: John Cavazos Created Date: 12/2/2009 9:58:38 PM](https://reader035.vdocument.in/reader035/viewer/2022070108/60419b4dfd69ee623476e59b/html5/thumbnails/17.jpg)
Is This Really “Ad-hoc” ? Relationship between practice and attribute
grammars
Similarities • Both rules & actions associated with productions • Application order determined by tools, not
author
![Page 18: lecture-21 - University of Delawarecavazos/CISC672/lectures/Lecture-21.pdf · Title: lecture-21.ppt Author: John Cavazos Created Date: 12/2/2009 9:58:38 PM](https://reader035.vdocument.in/reader035/viewer/2022070108/60419b4dfd69ee623476e59b/html5/thumbnails/18.jpg)
Is This Really “Ad-hoc” ? Relationship between practice and attribute
grammars
Differences • Actions applied as a unit; not true for AG rules • Anything goes in ad-hoc actions; AG rules are
functional
![Page 19: lecture-21 - University of Delawarecavazos/CISC672/lectures/Lecture-21.pdf · Title: lecture-21.ppt Author: John Cavazos Created Date: 12/2/2009 9:58:38 PM](https://reader035.vdocument.in/reader035/viewer/2022070108/60419b4dfd69ee623476e59b/html5/thumbnails/19.jpg)
Making Ad-hoc SDT Work How do we fit this into an LR(1) parser?
stack.push(INVALID); stack.push(s0); // initial state token = scanner.next_token(); loop forever { s = stack.top(); if ( ACTION[s,token] == “reduce A→β” ) then {
stack.popnum(2*|β|); // pop 2*|β| symbols s = stack.top(); stack.push(A); // push A stack.push(GOTO[s,A]); // push next state
} else if ( ACTION[s,token] == “shift si” ) then {
stack.push(token); stack.push(si); token ← scanner.next_token(); }
else if ( ACTION[s,token] == “accept” & token == EOF ) then break; else throw a syntax error;
} report success;
From an earlier lecture
![Page 20: lecture-21 - University of Delawarecavazos/CISC672/lectures/Lecture-21.pdf · Title: lecture-21.ppt Author: John Cavazos Created Date: 12/2/2009 9:58:38 PM](https://reader035.vdocument.in/reader035/viewer/2022070108/60419b4dfd69ee623476e59b/html5/thumbnails/20.jpg)
To add yacc-like actions • Stack has 3 items per symbol rather than 2 (3rd is $$)
stack.push(INVALID); stack.push(NULL); stack.push(s0); // initial state token = scanner.next_token(); loop forever { s = stack.top(); if ( ACTION[s,token] == “reduce A→β” ) then {
/* insert case statement here */ stack.popnum(3*|β|); // pop 3*|β| symbols
s = stack.top(); stack.push($$); // push result
stack.push(A); // push A stack.push(GOTO[s,A]); // push next state
} else if ( ACTION[s,token] == “shift si” ) then {
stack.push(attr); stack.push(token); stack.push(si); token ← scanner.next_token(); }
else if ( ACTION[s,token] == “accept” & token == EOF ) then break; else throw a syntax error;
} report success;
![Page 21: lecture-21 - University of Delawarecavazos/CISC672/lectures/Lecture-21.pdf · Title: lecture-21.ppt Author: John Cavazos Created Date: 12/2/2009 9:58:38 PM](https://reader035.vdocument.in/reader035/viewer/2022070108/60419b4dfd69ee623476e59b/html5/thumbnails/21.jpg)
stack.push(INVALID); stack.push(NULL); stack.push(s0); // initial state token = scanner.next_token(); loop forever { s = stack.top(); if ( ACTION[s,token] == “reduce A→β” ) then {
/* insert case statement here */ stack.popnum(3*|β|); // pop 3*|β| symbols
s = stack.top(); stack.push($$); // push result
stack.push(A); // push A stack.push(GOTO[s,A]); // push next state
} else if ( ACTION[s,token] == “shift si” ) then {
stack.push(attr); stack.push(token); stack.push(si); token ← scanner.next_token(); }
else if ( ACTION[s,token] == “accept” & token == EOF ) then break; else throw a syntax error;
} report success;
• Add case statement to the reduction processing section → Case switches on
production number
![Page 22: lecture-21 - University of Delawarecavazos/CISC672/lectures/Lecture-21.pdf · Title: lecture-21.ppt Author: John Cavazos Created Date: 12/2/2009 9:58:38 PM](https://reader035.vdocument.in/reader035/viewer/2022070108/60419b4dfd69ee623476e59b/html5/thumbnails/22.jpg)
stack.push(INVALID); stack.push(NULL); stack.push(s0); // initial state token = scanner.next_token(); loop forever { s = stack.top(); if ( ACTION[s,token] == “reduce A→β” ) then {
/* insert case statement here */ stack.popnum(3*|β|); // pop 3*|β| symbols
s = stack.top(); stack.push($$); // push result
stack.push(A); // push A stack.push(GOTO[s,A]); // push next state
} else if ( ACTION[s,token] == “shift si” ) then {
stack.push(attr); stack.push(token); stack.push(si); token ← scanner.next_token(); }
else if ( ACTION[s,token] == “accept” & token == EOF ) then break; else throw a syntax error;
} report success;
→ Each case clause holds the code snippet for that production
→ Substitute appropriate names for $$, $1, $2, …
![Page 23: lecture-21 - University of Delawarecavazos/CISC672/lectures/Lecture-21.pdf · Title: lecture-21.ppt Author: John Cavazos Created Date: 12/2/2009 9:58:38 PM](https://reader035.vdocument.in/reader035/viewer/2022070108/60419b4dfd69ee623476e59b/html5/thumbnails/23.jpg)
Making Ad-hoc SDT Work How do we fit this into an LR(1) parser? • Need a naming scheme to access them
→ $n translates into stack location (top - 3n) • Need to sequence rule applications
→ On every reduce action, perform the action rule → Add a giant case statement to the parser
top 6 (top – 3(1))
0 1 2 3 4 5 $1 = 3
(top – 3(2)) $2 = 0
![Page 24: lecture-21 - University of Delawarecavazos/CISC672/lectures/Lecture-21.pdf · Title: lecture-21.ppt Author: John Cavazos Created Date: 12/2/2009 9:58:38 PM](https://reader035.vdocument.in/reader035/viewer/2022070108/60419b4dfd69ee623476e59b/html5/thumbnails/24.jpg)
Making Ad-hoc SDT Work What about a rule that must work in mid-production? • Can transform the grammar
→ Split it into two parts at the point where rule must go → Apply the rule on reduction to the appropriate part
• Can also handle reductions on shift actions → Add a production to create a reduction
Was: fee → fum Make it: fee → fie → fum and tie the action to this new reduction
Together, these let us apply rule at any point in the parse
![Page 25: lecture-21 - University of Delawarecavazos/CISC672/lectures/Lecture-21.pdf · Title: lecture-21.ppt Author: John Cavazos Created Date: 12/2/2009 9:58:38 PM](https://reader035.vdocument.in/reader035/viewer/2022070108/60419b4dfd69ee623476e59b/html5/thumbnails/25.jpg)
Alternative Strategy What if you need to perform actions that do not fit well into the Ad-hoc Syntax-Directed Translation framework? • Build the abstract syntax tree using SDT • Perform the actions during one or more treewalks
→ In an OOL, think of this problem as a classic application of the visitor pattern
→ Perform arbitrary computation in treewalk order → Make multiple passes if necessary
Again, a competent junior or senior CS major would derive this solution after a couple of minutes of thought.