SlideShare a Scribd company logo
1 of 15
1
Syntax-Directed Translation
Part II
Chapter 5
Copyright Robert van Engelen, Florida State University, 2007
2
Translation Schemes using
Marker Nonterminals
S  if E M then S { backpatch(M.loc, pc-M.loc) }
M   { emit(iconst_0); M.loc := pc; emit(if_icmpeq, 0) }
S  if E { emit(iconst_0); push(pc); emit(if_icmpeq, 0) }
then S { backpatch(top(), pc-top()); pop() }
Need a stack!
(for nested if-then)
Synthesized attribute
(automatically stacked)
Insert marker nonterminal
3
Translation Schemes using
Marker Nonterminals in Yacc
S : IF E M THEN S { backpatch($3, pc-$3); }
;
M : /* empty */ { emit(iconst_0);
$$ = pc;
emit3(if_icmpeq, 0);
}
;
…
4
Replacing Inherited Attributes
with Synthesized Lists
D  T L { for all id  L.list : addtype(id.entry, T.type) }
T  int { T.type := ‘integer’ }
T  real { T.type := ‘real’ }
L  L1 , id { L.list := L1.list + [id] }
L  id { L.list := [id] }
D
T.type = ‘real’ L.list = [id1,id2,id3]
L.list = [id1,id2]
L.list = [id1] id2.entry
id1.entry
id3.entry
real
,
,
5
Replacing Inherited Attributes
with Synthesized Lists in Yacc
%{
typedef struct List
{ Symbol *entry;
struct List *next;
} List;
%}
%union
{ int type;
List *list;
Symbol *sym;
}
%token <sym> ID
%type <list> L
%type <type> T
%%
D : T L { List *p;
for (p = $2; p; p = p->next)
addtype(p->entry, $1);
}
;
T : INT { $$ = TYPE_INT; }
| REAL { $$ = TYPE_REAL; }
;
L : L ‘,’ ID
{ $$ = malloc(sizeof(List));
$$->entry = $3;
$$->next = $1;
}
| ID { $$ = malloc(sizeof(List));
$$->entry = $1;
$$->next = NULL;
}
;
6
Concrete and Abstract Syntax
Trees
• A parse tree is called a concrete syntax tree
• An abstract syntax tree (AST) is defined by
the compiler writer as a more convenient
intermediate representation
E
+
E T
id
id
id
*
Concrete syntax tree
+
*
id
id id
Abstract syntax tree
T T
7
Generating Abstract Syntax Trees
E.nptr
+
E.nptr T.nptr
id
id
id
*
T.nptr T.nptr
+
id *
id id
Synthesize
AST
8
S-Attributed Definitions for
Generating Abstract Syntax Trees
Production
E  E1 + T
E  E1 - T
E  T
T  T1 * id
T  T1 / id
T  id
Semantic Rule
E.nptr := mknode(‘+’, E1.nptr, T.nptr)
E.nptr := mknode(‘-’, E1.nptr, T.nptr)
E.nptr := T.nptr
T.nptr := mknode(‘*’, T1.nptr, mkleaf(id, id.entry))
T.nptr := mknode(‘/’, T1.nptr, mkleaf(id, id.entry))
T.nptr := mkleaf(id, id.entry)
9
Generating Abstract Syntax Trees
with Yacc
%{
typedef struct Node
{ int op; /* node op */
Symbol *entry; /* leaf */
struct Node *left, *right;
} Node;
%}
%union
{ Node *node;
Symbol *sym;
}
%token <sym> ID
%type <node> E T F
%%
E : E ‘+’ T { $$ = mknode(‘+’, $1, $3); }
| E ‘-’ T { $$ = mknode(‘-’, $1, $3); }
| T { $$ = $1; }
;
T : T ‘*’ F { $$ = mknode(‘*’, $1, $3); }
| T ‘/’ F { $$ = mknode(‘/’, $1, $3); }
| F { $$ = $1; }
;
F : ‘(’ E ‘)’ { $$ = $2; }
| ID { $$ = mkleaf($1); }
;
%%
10
Eliminating Left Recursion from
a Translation Scheme
A  A1 Y { A.a := g(A1.a, Y.y) }
A  X { A.a := f(X.x) }
A  X { R.i := f(X.x) } R { A.a := R.s }
R  Y { R1.i := g(R.i, Y.y) } R1 { R.s := R1.s }
R   { R.s := R.i }
11
Eliminating Left Recursion from
a Translation Scheme (cont’d)
A.a = g(g(f(X.x), Y1.y), Y2.y)
Y2
Y1
X
A.a = g(f(X.x), Y1.y)
A.a = f(X.x)
12
Eliminating Left Recursion from
a Translation Scheme (cont’d)
R3.i = g(g(f(X.x), Y1.y), Y2.y)
Y2
Y1
X
R2.i = g(f(X.x), Y1.y)
R1.i = f(X.x)
A

1. Flow of inherited
attribute values
13
Eliminating Left Recursion from
a Translation Scheme (cont’d)
R3.s = R3.i = g(g(f(X.x), Y1.y), Y2.y)
Y2
Y1
X
R2.s = R3.s = g(g(f(X.x), Y1.y), Y2.y)
R1.s = R2.s = g(g(f(X.x), Y1.y), Y2.y)
A.s = R1.s = g(g(f(X.x), Y1.y), Y2.y)

2. Flow of synthesized
attribute values
14
Generating Abstract Syntax Trees
with Predictive Parsers
E  T { R.i := T.nptr } R { E.nptr := R.s }
R  + T {R1.i := mknode(‘+’, R.i, T.nptr) } R1 { R.s := R1.s }
R  - T {R1.i := mknode(‘-’, R.i, T.nptr) } R1 { R.s := R1.s }
R   { R.s := R.i }
T  id { T.nptr := mkleaf(id, id.entry) }
E  E1 + T { E.nptr := mknode(‘+’, E1.nptr, T.nptr) }
E  E1 - T { E.nptr := mknode(‘-’, E1.nptr, T.nptr) }
E  T { E.nptr := T.nptr }
T  id { T.nptr := mkleaf(id, id.entry) }
15
Generating Abstract Syntax Trees
with Predictive Parsers (cont’d)
Node *R(Node *i)
{ Node *s, *i1;
if (lookahead == ‘+’)
{ match(‘+’);
s = T();
i1 = mknode(‘+’, i, s);
s = R(i1);
} else if (lookahead == ‘-’)
{ …
} else
s = i;
return s;
}

More Related Content

Similar to Ch5b.ppt

Let Us Learn Lambda Using C# 3.0
Let Us Learn Lambda Using C# 3.0Let Us Learn Lambda Using C# 3.0
Let Us Learn Lambda Using C# 3.0Sheik Uduman Ali
 
Chapter 5 - Syntax Directed Translation.ppt
Chapter 5 - Syntax Directed Translation.pptChapter 5 - Syntax Directed Translation.ppt
Chapter 5 - Syntax Directed Translation.pptMulugetaGebino
 
Chapter_5_Syntax_Directed_Translation.ppt
Chapter_5_Syntax_Directed_Translation.pptChapter_5_Syntax_Directed_Translation.ppt
Chapter_5_Syntax_Directed_Translation.pptJigarThummar1
 
R Cheat Sheet for Data Analysts and Statisticians.pdf
R Cheat Sheet for Data Analysts and Statisticians.pdfR Cheat Sheet for Data Analysts and Statisticians.pdf
R Cheat Sheet for Data Analysts and Statisticians.pdfTimothy McBush Hiele
 
Implementing Software Machines in Go and C
Implementing Software Machines in Go and CImplementing Software Machines in Go and C
Implementing Software Machines in Go and CEleanor McHugh
 
CS17604_TOP Parser Compiler Design Techniques
CS17604_TOP Parser Compiler Design TechniquesCS17604_TOP Parser Compiler Design Techniques
CS17604_TOP Parser Compiler Design Techniquesd72994185
 
Explicit Formula for Riemann Prime Counting Function
Explicit Formula for Riemann Prime Counting FunctionExplicit Formula for Riemann Prime Counting Function
Explicit Formula for Riemann Prime Counting FunctionKannan Nambiar
 
Cgo2007 P3 3 Birkbeck
Cgo2007 P3 3 BirkbeckCgo2007 P3 3 Birkbeck
Cgo2007 P3 3 BirkbeckaiQUANT
 
A Dimension Abstraction Approach to Vectorization in Matlab
A Dimension Abstraction Approach to Vectorization in MatlabA Dimension Abstraction Approach to Vectorization in Matlab
A Dimension Abstraction Approach to Vectorization in MatlabaiQUANT
 
Intermediate code generation1
Intermediate code generation1Intermediate code generation1
Intermediate code generation1Shashwat Shriparv
 
Monadic Comprehensions and Functional Composition with Query Expressions
Monadic Comprehensions and Functional Composition with Query ExpressionsMonadic Comprehensions and Functional Composition with Query Expressions
Monadic Comprehensions and Functional Composition with Query ExpressionsChris Eargle
 
Data structure 8.pptx
Data structure 8.pptxData structure 8.pptx
Data structure 8.pptxSajalFayyaz
 
Advanced data structure
Advanced data structureAdvanced data structure
Advanced data structureShakil Ahmed
 
Chapter_5_Syntax_Directed_Translation.ppt
Chapter_5_Syntax_Directed_Translation.pptChapter_5_Syntax_Directed_Translation.ppt
Chapter_5_Syntax_Directed_Translation.pptSatyamVerma61
 
Generating code from dags
Generating code from dagsGenerating code from dags
Generating code from dagsindhu mathi
 
Scala as a Declarative Language
Scala as a Declarative LanguageScala as a Declarative Language
Scala as a Declarative Languagevsssuresh
 

Similar to Ch5b.ppt (20)

Chap05alg
Chap05algChap05alg
Chap05alg
 
Chapter 5 Syntax Directed Translation
Chapter 5   Syntax Directed TranslationChapter 5   Syntax Directed Translation
Chapter 5 Syntax Directed Translation
 
PARSING.ppt
PARSING.pptPARSING.ppt
PARSING.ppt
 
Matlab differential
Matlab differentialMatlab differential
Matlab differential
 
Let Us Learn Lambda Using C# 3.0
Let Us Learn Lambda Using C# 3.0Let Us Learn Lambda Using C# 3.0
Let Us Learn Lambda Using C# 3.0
 
Chapter 5 - Syntax Directed Translation.ppt
Chapter 5 - Syntax Directed Translation.pptChapter 5 - Syntax Directed Translation.ppt
Chapter 5 - Syntax Directed Translation.ppt
 
Chapter_5_Syntax_Directed_Translation.ppt
Chapter_5_Syntax_Directed_Translation.pptChapter_5_Syntax_Directed_Translation.ppt
Chapter_5_Syntax_Directed_Translation.ppt
 
R Cheat Sheet for Data Analysts and Statisticians.pdf
R Cheat Sheet for Data Analysts and Statisticians.pdfR Cheat Sheet for Data Analysts and Statisticians.pdf
R Cheat Sheet for Data Analysts and Statisticians.pdf
 
Implementing Software Machines in Go and C
Implementing Software Machines in Go and CImplementing Software Machines in Go and C
Implementing Software Machines in Go and C
 
CS17604_TOP Parser Compiler Design Techniques
CS17604_TOP Parser Compiler Design TechniquesCS17604_TOP Parser Compiler Design Techniques
CS17604_TOP Parser Compiler Design Techniques
 
Explicit Formula for Riemann Prime Counting Function
Explicit Formula for Riemann Prime Counting FunctionExplicit Formula for Riemann Prime Counting Function
Explicit Formula for Riemann Prime Counting Function
 
Cgo2007 P3 3 Birkbeck
Cgo2007 P3 3 BirkbeckCgo2007 P3 3 Birkbeck
Cgo2007 P3 3 Birkbeck
 
A Dimension Abstraction Approach to Vectorization in Matlab
A Dimension Abstraction Approach to Vectorization in MatlabA Dimension Abstraction Approach to Vectorization in Matlab
A Dimension Abstraction Approach to Vectorization in Matlab
 
Intermediate code generation1
Intermediate code generation1Intermediate code generation1
Intermediate code generation1
 
Monadic Comprehensions and Functional Composition with Query Expressions
Monadic Comprehensions and Functional Composition with Query ExpressionsMonadic Comprehensions and Functional Composition with Query Expressions
Monadic Comprehensions and Functional Composition with Query Expressions
 
Data structure 8.pptx
Data structure 8.pptxData structure 8.pptx
Data structure 8.pptx
 
Advanced data structure
Advanced data structureAdvanced data structure
Advanced data structure
 
Chapter_5_Syntax_Directed_Translation.ppt
Chapter_5_Syntax_Directed_Translation.pptChapter_5_Syntax_Directed_Translation.ppt
Chapter_5_Syntax_Directed_Translation.ppt
 
Generating code from dags
Generating code from dagsGenerating code from dags
Generating code from dags
 
Scala as a Declarative Language
Scala as a Declarative LanguageScala as a Declarative Language
Scala as a Declarative Language
 

Recently uploaded

Chennai Call Girls Porur Phone 🍆 8250192130 👅 celebrity escorts service
Chennai Call Girls Porur Phone 🍆 8250192130 👅 celebrity escorts serviceChennai Call Girls Porur Phone 🍆 8250192130 👅 celebrity escorts service
Chennai Call Girls Porur Phone 🍆 8250192130 👅 celebrity escorts servicesonalikaur4
 
Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)
Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)
Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)Dana Luther
 
Hot Service (+9316020077 ) Goa Call Girls Real Photos and Genuine Service
Hot Service (+9316020077 ) Goa  Call Girls Real Photos and Genuine ServiceHot Service (+9316020077 ) Goa  Call Girls Real Photos and Genuine Service
Hot Service (+9316020077 ) Goa Call Girls Real Photos and Genuine Servicesexy call girls service in goa
 
Russian Call Girls in Kolkata Samaira 🤌 8250192130 🚀 Vip Call Girls Kolkata
Russian Call Girls in Kolkata Samaira 🤌  8250192130 🚀 Vip Call Girls KolkataRussian Call Girls in Kolkata Samaira 🤌  8250192130 🚀 Vip Call Girls Kolkata
Russian Call Girls in Kolkata Samaira 🤌 8250192130 🚀 Vip Call Girls Kolkataanamikaraghav4
 
AWS Community DAY Albertini-Ellan Cloud Security (1).pptx
AWS Community DAY Albertini-Ellan Cloud Security (1).pptxAWS Community DAY Albertini-Ellan Cloud Security (1).pptx
AWS Community DAY Albertini-Ellan Cloud Security (1).pptxellan12
 
VIP Kolkata Call Girl Salt Lake 👉 8250192130 Available With Room
VIP Kolkata Call Girl Salt Lake 👉 8250192130  Available With RoomVIP Kolkata Call Girl Salt Lake 👉 8250192130  Available With Room
VIP Kolkata Call Girl Salt Lake 👉 8250192130 Available With Roomishabajaj13
 
Best VIP Call Girls Noida Sector 75 Call Me: 8448380779
Best VIP Call Girls Noida Sector 75 Call Me: 8448380779Best VIP Call Girls Noida Sector 75 Call Me: 8448380779
Best VIP Call Girls Noida Sector 75 Call Me: 8448380779Delhi Call girls
 
VIP Kolkata Call Girl Dum Dum 👉 8250192130 Available With Room
VIP Kolkata Call Girl Dum Dum 👉 8250192130  Available With RoomVIP Kolkata Call Girl Dum Dum 👉 8250192130  Available With Room
VIP Kolkata Call Girl Dum Dum 👉 8250192130 Available With Roomdivyansh0kumar0
 
VIP 7001035870 Find & Meet Hyderabad Call Girls LB Nagar high-profile Call Girl
VIP 7001035870 Find & Meet Hyderabad Call Girls LB Nagar high-profile Call GirlVIP 7001035870 Find & Meet Hyderabad Call Girls LB Nagar high-profile Call Girl
VIP 7001035870 Find & Meet Hyderabad Call Girls LB Nagar high-profile Call Girladitipandeya
 
GDG Cloud Southlake 32: Kyle Hettinger: Demystifying the Dark Web
GDG Cloud Southlake 32: Kyle Hettinger: Demystifying the Dark WebGDG Cloud Southlake 32: Kyle Hettinger: Demystifying the Dark Web
GDG Cloud Southlake 32: Kyle Hettinger: Demystifying the Dark WebJames Anderson
 
Call Girls In Saket Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Saket Delhi 💯Call Us 🔝8264348440🔝Call Girls In Saket Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Saket Delhi 💯Call Us 🔝8264348440🔝soniya singh
 
'Future Evolution of the Internet' delivered by Geoff Huston at Everything Op...
'Future Evolution of the Internet' delivered by Geoff Huston at Everything Op...'Future Evolution of the Internet' delivered by Geoff Huston at Everything Op...
'Future Evolution of the Internet' delivered by Geoff Huston at Everything Op...APNIC
 
Low Rate Call Girls Kolkata Avani 🤌 8250192130 🚀 Vip Call Girls Kolkata
Low Rate Call Girls Kolkata Avani 🤌  8250192130 🚀 Vip Call Girls KolkataLow Rate Call Girls Kolkata Avani 🤌  8250192130 🚀 Vip Call Girls Kolkata
Low Rate Call Girls Kolkata Avani 🤌 8250192130 🚀 Vip Call Girls Kolkataanamikaraghav4
 
Low Rate Young Call Girls in Sector 63 Mamura Noida ✔️☆9289244007✔️☆ Female E...
Low Rate Young Call Girls in Sector 63 Mamura Noida ✔️☆9289244007✔️☆ Female E...Low Rate Young Call Girls in Sector 63 Mamura Noida ✔️☆9289244007✔️☆ Female E...
Low Rate Young Call Girls in Sector 63 Mamura Noida ✔️☆9289244007✔️☆ Female E...SofiyaSharma5
 
Russian Call Girls Thane Swara 8617697112 Independent Escort Service Thane
Russian Call Girls Thane Swara 8617697112 Independent Escort Service ThaneRussian Call Girls Thane Swara 8617697112 Independent Escort Service Thane
Russian Call Girls Thane Swara 8617697112 Independent Escort Service ThaneCall girls in Ahmedabad High profile
 
Challengers I Told Ya ShirtChallengers I Told Ya Shirt
Challengers I Told Ya ShirtChallengers I Told Ya ShirtChallengers I Told Ya ShirtChallengers I Told Ya Shirt
Challengers I Told Ya ShirtChallengers I Told Ya Shirtrahman018755
 

Recently uploaded (20)

Chennai Call Girls Porur Phone 🍆 8250192130 👅 celebrity escorts service
Chennai Call Girls Porur Phone 🍆 8250192130 👅 celebrity escorts serviceChennai Call Girls Porur Phone 🍆 8250192130 👅 celebrity escorts service
Chennai Call Girls Porur Phone 🍆 8250192130 👅 celebrity escorts service
 
Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)
Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)
Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)
 
Rohini Sector 22 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
Rohini Sector 22 Call Girls Delhi 9999965857 @Sabina Saikh No AdvanceRohini Sector 22 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
Rohini Sector 22 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
 
Hot Service (+9316020077 ) Goa Call Girls Real Photos and Genuine Service
Hot Service (+9316020077 ) Goa  Call Girls Real Photos and Genuine ServiceHot Service (+9316020077 ) Goa  Call Girls Real Photos and Genuine Service
Hot Service (+9316020077 ) Goa Call Girls Real Photos and Genuine Service
 
Russian Call Girls in Kolkata Samaira 🤌 8250192130 🚀 Vip Call Girls Kolkata
Russian Call Girls in Kolkata Samaira 🤌  8250192130 🚀 Vip Call Girls KolkataRussian Call Girls in Kolkata Samaira 🤌  8250192130 🚀 Vip Call Girls Kolkata
Russian Call Girls in Kolkata Samaira 🤌 8250192130 🚀 Vip Call Girls Kolkata
 
AWS Community DAY Albertini-Ellan Cloud Security (1).pptx
AWS Community DAY Albertini-Ellan Cloud Security (1).pptxAWS Community DAY Albertini-Ellan Cloud Security (1).pptx
AWS Community DAY Albertini-Ellan Cloud Security (1).pptx
 
VIP Kolkata Call Girl Salt Lake 👉 8250192130 Available With Room
VIP Kolkata Call Girl Salt Lake 👉 8250192130  Available With RoomVIP Kolkata Call Girl Salt Lake 👉 8250192130  Available With Room
VIP Kolkata Call Girl Salt Lake 👉 8250192130 Available With Room
 
Best VIP Call Girls Noida Sector 75 Call Me: 8448380779
Best VIP Call Girls Noida Sector 75 Call Me: 8448380779Best VIP Call Girls Noida Sector 75 Call Me: 8448380779
Best VIP Call Girls Noida Sector 75 Call Me: 8448380779
 
VIP Kolkata Call Girl Dum Dum 👉 8250192130 Available With Room
VIP Kolkata Call Girl Dum Dum 👉 8250192130  Available With RoomVIP Kolkata Call Girl Dum Dum 👉 8250192130  Available With Room
VIP Kolkata Call Girl Dum Dum 👉 8250192130 Available With Room
 
VIP 7001035870 Find & Meet Hyderabad Call Girls LB Nagar high-profile Call Girl
VIP 7001035870 Find & Meet Hyderabad Call Girls LB Nagar high-profile Call GirlVIP 7001035870 Find & Meet Hyderabad Call Girls LB Nagar high-profile Call Girl
VIP 7001035870 Find & Meet Hyderabad Call Girls LB Nagar high-profile Call Girl
 
GDG Cloud Southlake 32: Kyle Hettinger: Demystifying the Dark Web
GDG Cloud Southlake 32: Kyle Hettinger: Demystifying the Dark WebGDG Cloud Southlake 32: Kyle Hettinger: Demystifying the Dark Web
GDG Cloud Southlake 32: Kyle Hettinger: Demystifying the Dark Web
 
Call Girls In Saket Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Saket Delhi 💯Call Us 🔝8264348440🔝Call Girls In Saket Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Saket Delhi 💯Call Us 🔝8264348440🔝
 
'Future Evolution of the Internet' delivered by Geoff Huston at Everything Op...
'Future Evolution of the Internet' delivered by Geoff Huston at Everything Op...'Future Evolution of the Internet' delivered by Geoff Huston at Everything Op...
'Future Evolution of the Internet' delivered by Geoff Huston at Everything Op...
 
Rohini Sector 6 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
Rohini Sector 6 Call Girls Delhi 9999965857 @Sabina Saikh No AdvanceRohini Sector 6 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
Rohini Sector 6 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
 
Model Call Girl in Jamuna Vihar Delhi reach out to us at 🔝9953056974🔝
Model Call Girl in  Jamuna Vihar Delhi reach out to us at 🔝9953056974🔝Model Call Girl in  Jamuna Vihar Delhi reach out to us at 🔝9953056974🔝
Model Call Girl in Jamuna Vihar Delhi reach out to us at 🔝9953056974🔝
 
Rohini Sector 26 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
Rohini Sector 26 Call Girls Delhi 9999965857 @Sabina Saikh No AdvanceRohini Sector 26 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
Rohini Sector 26 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
 
Low Rate Call Girls Kolkata Avani 🤌 8250192130 🚀 Vip Call Girls Kolkata
Low Rate Call Girls Kolkata Avani 🤌  8250192130 🚀 Vip Call Girls KolkataLow Rate Call Girls Kolkata Avani 🤌  8250192130 🚀 Vip Call Girls Kolkata
Low Rate Call Girls Kolkata Avani 🤌 8250192130 🚀 Vip Call Girls Kolkata
 
Low Rate Young Call Girls in Sector 63 Mamura Noida ✔️☆9289244007✔️☆ Female E...
Low Rate Young Call Girls in Sector 63 Mamura Noida ✔️☆9289244007✔️☆ Female E...Low Rate Young Call Girls in Sector 63 Mamura Noida ✔️☆9289244007✔️☆ Female E...
Low Rate Young Call Girls in Sector 63 Mamura Noida ✔️☆9289244007✔️☆ Female E...
 
Russian Call Girls Thane Swara 8617697112 Independent Escort Service Thane
Russian Call Girls Thane Swara 8617697112 Independent Escort Service ThaneRussian Call Girls Thane Swara 8617697112 Independent Escort Service Thane
Russian Call Girls Thane Swara 8617697112 Independent Escort Service Thane
 
Challengers I Told Ya ShirtChallengers I Told Ya Shirt
Challengers I Told Ya ShirtChallengers I Told Ya ShirtChallengers I Told Ya ShirtChallengers I Told Ya Shirt
Challengers I Told Ya ShirtChallengers I Told Ya Shirt
 

Ch5b.ppt

  • 1. 1 Syntax-Directed Translation Part II Chapter 5 Copyright Robert van Engelen, Florida State University, 2007
  • 2. 2 Translation Schemes using Marker Nonterminals S  if E M then S { backpatch(M.loc, pc-M.loc) } M   { emit(iconst_0); M.loc := pc; emit(if_icmpeq, 0) } S  if E { emit(iconst_0); push(pc); emit(if_icmpeq, 0) } then S { backpatch(top(), pc-top()); pop() } Need a stack! (for nested if-then) Synthesized attribute (automatically stacked) Insert marker nonterminal
  • 3. 3 Translation Schemes using Marker Nonterminals in Yacc S : IF E M THEN S { backpatch($3, pc-$3); } ; M : /* empty */ { emit(iconst_0); $$ = pc; emit3(if_icmpeq, 0); } ; …
  • 4. 4 Replacing Inherited Attributes with Synthesized Lists D  T L { for all id  L.list : addtype(id.entry, T.type) } T  int { T.type := ‘integer’ } T  real { T.type := ‘real’ } L  L1 , id { L.list := L1.list + [id] } L  id { L.list := [id] } D T.type = ‘real’ L.list = [id1,id2,id3] L.list = [id1,id2] L.list = [id1] id2.entry id1.entry id3.entry real , ,
  • 5. 5 Replacing Inherited Attributes with Synthesized Lists in Yacc %{ typedef struct List { Symbol *entry; struct List *next; } List; %} %union { int type; List *list; Symbol *sym; } %token <sym> ID %type <list> L %type <type> T %% D : T L { List *p; for (p = $2; p; p = p->next) addtype(p->entry, $1); } ; T : INT { $$ = TYPE_INT; } | REAL { $$ = TYPE_REAL; } ; L : L ‘,’ ID { $$ = malloc(sizeof(List)); $$->entry = $3; $$->next = $1; } | ID { $$ = malloc(sizeof(List)); $$->entry = $1; $$->next = NULL; } ;
  • 6. 6 Concrete and Abstract Syntax Trees • A parse tree is called a concrete syntax tree • An abstract syntax tree (AST) is defined by the compiler writer as a more convenient intermediate representation E + E T id id id * Concrete syntax tree + * id id id Abstract syntax tree T T
  • 7. 7 Generating Abstract Syntax Trees E.nptr + E.nptr T.nptr id id id * T.nptr T.nptr + id * id id Synthesize AST
  • 8. 8 S-Attributed Definitions for Generating Abstract Syntax Trees Production E  E1 + T E  E1 - T E  T T  T1 * id T  T1 / id T  id Semantic Rule E.nptr := mknode(‘+’, E1.nptr, T.nptr) E.nptr := mknode(‘-’, E1.nptr, T.nptr) E.nptr := T.nptr T.nptr := mknode(‘*’, T1.nptr, mkleaf(id, id.entry)) T.nptr := mknode(‘/’, T1.nptr, mkleaf(id, id.entry)) T.nptr := mkleaf(id, id.entry)
  • 9. 9 Generating Abstract Syntax Trees with Yacc %{ typedef struct Node { int op; /* node op */ Symbol *entry; /* leaf */ struct Node *left, *right; } Node; %} %union { Node *node; Symbol *sym; } %token <sym> ID %type <node> E T F %% E : E ‘+’ T { $$ = mknode(‘+’, $1, $3); } | E ‘-’ T { $$ = mknode(‘-’, $1, $3); } | T { $$ = $1; } ; T : T ‘*’ F { $$ = mknode(‘*’, $1, $3); } | T ‘/’ F { $$ = mknode(‘/’, $1, $3); } | F { $$ = $1; } ; F : ‘(’ E ‘)’ { $$ = $2; } | ID { $$ = mkleaf($1); } ; %%
  • 10. 10 Eliminating Left Recursion from a Translation Scheme A  A1 Y { A.a := g(A1.a, Y.y) } A  X { A.a := f(X.x) } A  X { R.i := f(X.x) } R { A.a := R.s } R  Y { R1.i := g(R.i, Y.y) } R1 { R.s := R1.s } R   { R.s := R.i }
  • 11. 11 Eliminating Left Recursion from a Translation Scheme (cont’d) A.a = g(g(f(X.x), Y1.y), Y2.y) Y2 Y1 X A.a = g(f(X.x), Y1.y) A.a = f(X.x)
  • 12. 12 Eliminating Left Recursion from a Translation Scheme (cont’d) R3.i = g(g(f(X.x), Y1.y), Y2.y) Y2 Y1 X R2.i = g(f(X.x), Y1.y) R1.i = f(X.x) A  1. Flow of inherited attribute values
  • 13. 13 Eliminating Left Recursion from a Translation Scheme (cont’d) R3.s = R3.i = g(g(f(X.x), Y1.y), Y2.y) Y2 Y1 X R2.s = R3.s = g(g(f(X.x), Y1.y), Y2.y) R1.s = R2.s = g(g(f(X.x), Y1.y), Y2.y) A.s = R1.s = g(g(f(X.x), Y1.y), Y2.y)  2. Flow of synthesized attribute values
  • 14. 14 Generating Abstract Syntax Trees with Predictive Parsers E  T { R.i := T.nptr } R { E.nptr := R.s } R  + T {R1.i := mknode(‘+’, R.i, T.nptr) } R1 { R.s := R1.s } R  - T {R1.i := mknode(‘-’, R.i, T.nptr) } R1 { R.s := R1.s } R   { R.s := R.i } T  id { T.nptr := mkleaf(id, id.entry) } E  E1 + T { E.nptr := mknode(‘+’, E1.nptr, T.nptr) } E  E1 - T { E.nptr := mknode(‘-’, E1.nptr, T.nptr) } E  T { E.nptr := T.nptr } T  id { T.nptr := mkleaf(id, id.entry) }
  • 15. 15 Generating Abstract Syntax Trees with Predictive Parsers (cont’d) Node *R(Node *i) { Node *s, *i1; if (lookahead == ‘+’) { match(‘+’); s = T(); i1 = mknode(‘+’, i, s); s = R(i1); } else if (lookahead == ‘-’) { … } else s = i; return s; }