
Study with the several resources on Docsity
Earn points by helping other students or get them with a premium plan
Prepare for your exams
Study with the several resources on Docsity
Earn points to download
Earn points by helping other students or get them with a premium plan
Translation scheme, Three address code, Destructive operators, Modern processor, Syntax directed translation scheme, Assignment statement, Symbol table, Hash table are the points from this lecture. You can find series of lecture notes for compiler construction here.
Typology: Study notes
1 / 1
This page cannot be seen from the preview
Don't miss anything!

Sohail Aslam Compiler Construction Notes Set:6-
Three-address code is attractive for several reasons. Absence of destructive operators gives the compiler freedom to reuse names and values. Three-address code is reasonably compact: operations are 1 to 2 bytes; addresses are 4 bytes. Many modern processors implement three-address operations; a three-address code models their properties well
We now consider syntax-directed translation schemes using three-address code for various programming constructs. We start with the assignment statement.
Assignment Statement
Production translation scheme S โ id = E { p = lookup(id.name); emit( p, โ=โ, E.place); } E โ E1 + E2 { E.place = newtemp(); emit( E.place, โ=โ, E1.place,โ+โ, E2.place); } E โ E1 โ E2 { E.place = newtemp(); emit( E.place, โ=โ, E1.place, โโโ, E2.place); } E โ โ E1 { E.place = newtemp(); emit( E.place, โ=โ, โโโ ,E1.place); } E โ ( E1 ) { E.place = E1.place; } E โ id { p = lookup(id.name); emit( E.place, โ=โ, p ); }
The translation scheme uses a symbol table for identifiers and temporaries. Every time the parser encounters an identifier, it installs it in the symbol table. The symbol table can be implemented as a hash table or using some other efficient data structure for table. The routine lookup(name) checks if there an entry for the name in the symbol table. If the name is found, the routine returns a pointer to entry. The routine newtemp() returns a new temporary in response to successive calls. Temporaries can be placed in the symbol table. The routine emit() generates a three-address statement which can either be held in memory or written to a file. The attribute E.place records the symbol table location.