1 Syntax-Directed Translation Part II Chapter 5 COP5621 Compiler Construction Copyright Robert van Engelen, Florida State University, 2005.

Slides:



Advertisements
Similar presentations
Chapter 2-2 A Simple One-Pass Compiler
Advertisements

Chapter 5 Syntax-Directed Translation. Translation of languages guided by context-free grammars. Attach attributes to the grammar symbols. Values of the.
Chapter 8 Intermediate Code Generation. Intermediate languages: Syntax trees, three-address code, quadruples. Types of Three – Address Statements: x :=
1 Compiler Construction Intermediate Code Generation.
Compiler Construction Sohail Aslam Lecture IR Taxonomy IRs fall into three organizational categories 1.Graphical IRs encode the compiler’s knowledge.
1 Error detection in LR parsing Errors are discovered when a slot in the action table is blank. Canonical LR(1) parsers detect and report the error as.
Lecture # 17 Syntax Directed Definition. 2 Translation Schemes A translation scheme is a CF grammar embedded with semantic actions rest  + term { print(“+”)
Syntax Trees MathWorks Compiler Course – Day 5. Syntax Trees MathWorks Compiler Course – Day 5 Parser lexemes shift/reduce seq. Cfg tables Tree Symbols.
Intermediate Code Generation Professor Yihjia Tsai Tamkang University.
Syntax Directed Translation
Syntax-Directed Translation Context-free grammar with synthesized and/or inherited attributes. The showing of values at nodes of a parse tree is called.
CH4.1 CSE244 Syntax Directed Translation Aggelos Kiayias Computer Science & Engineering Department The University of Connecticut 371 Fairfield Road, Unit.
Syntax-Directed Translation
Chapter 2 Chang Chi-Chung rev.1. A Simple Syntax-Directed Translator This chapter contains introductory material to Chapters 3 to 8  To create.
Abstract Syntax Trees Lecture 14 Wed, Mar 3, 2004.
2.2 A Simple Syntax-Directed Translator Syntax-Directed Translation 2.4 Parsing 2.5 A Translator for Simple Expressions 2.6 Lexical Analysis.
Chapter 5 Syntax-Directed Translation Section 0 Approaches to implement Syntax-Directed Translation 1、Basic idea Guided by context-free grammar (Translating.
Syntax Directed Definitions Synthesized Attributes
Semantic Analysis (Generating An AST) CS 471 September 26, 2007.
Topic #5: Translations EE 456 – Compiling Techniques Prof. Carl Sable Fall 2003.
1 Semantic Analysis Aaron Bloomfield CS 415 Fall 2005.
Topic: Syntax Directed Translations
COP4020 Programming Languages Semantics Prof. Xin Yuan.
1 Intermediate Code Generation Part I Chapter 8 COP5621 Compiler Construction Copyright Robert van Engelen, Florida State University, 2007.
Chapter 8: Intermediate Code Generation
Topic #2: Infix to Postfix EE 456 – Compiling Techniques Prof. Carl Sable Fall 2003.
1 Semantic Analysis. 2 Semantic Analyzer Attribute Grammars Syntax Tree Construction Top-Down Translators Bottom-Up Translators Recursive Evaluators Type.
Chapter 5: Syntax directed translation –Use the grammar to direct the translation The grammar defines the syntax of the input language. Attributes are.
Chapter 5. Syntax-Directed Translation. 2 Fig Syntax-directed definition of a simple desk calculator ProductionSemantic Rules L  E n print ( E.val.
Review: Syntax directed translation. –Translation is done according to the parse tree. Each production (when used in the parsing) is a sub- structure of.
1 Static Checking and Type Systems Chapter 6 COP5621 Compiler Construction Copyright Robert van Engelen, Florida State University, 2005.
Chapter 3 Context-Free Grammars and Parsing. The Parsing Process sequence of tokens syntax tree parser Duties of parser: Determine correct syntax Build.
1 Syntax-Directed Translation Part I Chapter 5 COP5621 Compiler Construction Copyright Robert van Engelen, Florida State University, 2007.
1 Syntax-Directed Translation We associate information with the programming language constructs by attaching attributes to grammar symbols. 2.Values.
Syntax Directed Definition and Syntax directed Translation
1 A Simple Syntax-Directed Translator CS308 Compiler Theory.
C H A P T E R T W O Linking Syntax And Semantics Programming Languages – Principles and Paradigms by Allen Tucker, Robert Noonan.
Chapter 8: Semantic Analyzer1 Compiler Designs and Constructions Chapter 8: Semantic Analyzer Objectives: Syntax-Directed Translation Type Checking Dr.
CSE 420 Lecture Program is lexically well-formed: ▫Identifiers have valid names. ▫Strings are properly terminated. ▫No stray characters. Program.
Chapter4 Syntax-Directed Translation Introduction : 1.In the lexical analysis step, each token has its attribute , e.g., the attribute of an id is a pointer.
1 Static Checking and Type Systems Chapter 6 COP5621 Compiler Construction Copyright Robert van Engelen, Florida State University, 2007.
Semantics Analysis.
Chapter 5: Syntax Directed Translation
Syntax-Directed Translation
A Simple Syntax-Directed Translator
Constructing Precedence Table
Chapter 3 Context-Free Grammar and Parsing
Compiler Construction
Abstract Syntax Trees Lecture 14 Mon, Feb 28, 2005.
Syntax-Directed Translation Part I
Syntax-Directed Translation Part II
Intermediate Code Generation Part I
Chapter 5. Syntax-Directed Translation
Syntax-Directed Translation Part I
Syntax-Directed Translation Part I
Syntax-Directed Definition
פרק 5 תרגום מונחה תחביר תורת הקומפילציה איתן אביאור.
Intermediate Code Generation Part I
Syntax-Directed Translation Part II
Syntax-Directed Translation Part II
Intermediate Code Generation Part I
Syntax Analysis - Parsing
Syntax-Directed Translation Part I
Syntax-Directed Translation Part II
Directed Acyclic Graphs (DAG)
Intermediate Code Generation Part I
Syntax-Directed Translation Part I
COP4020 Programming Languages
COP4020 Programming Languages
Presentation transcript:

1 Syntax-Directed Translation Part II Chapter 5 COP5621 Compiler Construction Copyright Robert van Engelen, Florida State University, 2005

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  L 1, id { L.list := L 1.list + [id] } L  id { L.list := [id] } D T.type = ‘real’L.list = [id 1,id 2,id 3 ] L.list = [id 1,id 2 ] L.list = [id 1 ]id 2.entry id 1.entry id 3.entryreal,,

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 ID %type L %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 +ET id * Concrete syntax tree + *id Abstract syntax tree TT

7 Generating Abstract Syntax Trees E.nptr + T.nptr id *T.nptr + id* Synthesize AST

8 S-Attributed Definitions for Generating Abstract Syntax Trees Production E  E 1 + T E  E 1 - T E  T T  T 1 * id T  T 1 / id T  id Semantic Rule E.nptr := mknode(‘+’, E 1.nptr, T.nptr) E.nptr := mknode(‘-’, E 1.nptr, T.nptr) E.nptr := T.nptr T.nptr := mknode(‘*’, T 1.nptr, mkleaf(id, id.entry)) T.nptr := mknode(‘/’, T 1.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 ID %type 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  A 1 Y{ A.a := g(A 1.a, Y.y) } A  X{ A.a := f(X.x) } A  X { R.i := f(X.x) } R { A.a := R.s } R  Y{ R 1.i := g(R.i, Y.y) } R 1 { R.s := R 1.s } R   { R.s := R.i }

11 Eliminating Left Recursion from a Translation Scheme (cont’d) A.a = g(g(f(X.x), Y 1.y), Y 2.y) Y2Y2 Y1Y1 X A.a = g(f(X.x), Y 1.y) A.a = f(X.x)

12 Eliminating Left Recursion from a Translation Scheme (cont’d) R 3.i = g(g(f(X.x), Y 1.y), Y 2.y)Y2Y2 Y1Y1 X R 2.i = g(f(X.x), Y 1.y) R 1.i = f(X.x) A  1. Flow of inherited attribute values

13 Eliminating Left Recursion from a Translation Scheme (cont’d) R 3.s = R 3.i = g(g(f(X.x), Y 1.y), Y 2.y)Y2Y2 Y1Y1 X R 2.s = R 3.s = g(g(f(X.x), Y 1.y), Y 2.y) R 1.s = R 2.s = g(g(f(X.x), Y 1.y), Y 2.y) A.s = R 1.s = g(g(f(X.x), Y 1.y), Y 2.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 {R 1.i := mknode(‘+’, R.i, T.nptr) } R 1 { R.s := R 1.s } R  - T {R 1.i := mknode(‘-’, R.i, T.nptr) } R 1 { R.s := R 1.s } R   { R.s := R.i } T  id { T.nptr := mkleaf(id, id.entry) } E  E 1 + T { E.nptr := mknode(‘+’, E 1.nptr, T.nptr) } E  E 1 - T { E.nptr := mknode(‘-’, E 1.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; }