Chapter 5. Syntax-Directed Translation. 2 Fig. 5.2. Syntax-directed definition of a simple desk calculator ProductionSemantic Rules L  E n print ( E.val.

Slides:



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

Compiler Designs and Constructions
Chapter 5 Syntax-Directed Translation. Translation of languages guided by context-free grammars. Attach attributes to the grammar symbols. Values of the.
1 Compiler Construction Intermediate Code Generation.
Chapter 5 Syntax Directed Translation. Outline Syntax Directed Definitions Evaluation Orders of SDD’s Applications of Syntax Directed Translation Syntax.
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.
1 Beyond syntax analysis An identifier named x has been recognized. Is x a scalar, array or function? How big is x? If x is a function, how many and what.
Lecture # 17 Syntax Directed Definition. 2 Translation Schemes A translation scheme is a CF grammar embedded with semantic actions rest  + term { print(“+”)
Intermediate Code Generation Professor Yihjia Tsai Tamkang University.
Abstract Syntax Tree (AST)
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
CH4.1 CSE244 Intermediate Code Generation Aggelos Kiayias Computer Science & Engineering Department The University of Connecticut 371 Fairfield Road, Unit.
Abstract Syntax Trees Lecture 14 Wed, Mar 3, 2004.
Copyright © 2005 Elsevier Chapter 4 :: Semantic Analysis Programming Language Pragmatics Michael L. Scott.
Chapter 5 Syntax-Directed Translation Section 0 Approaches to implement Syntax-Directed Translation 1、Basic idea Guided by context-free grammar (Translating.
Topic #5: Translations EE 456 – Compiling Techniques Prof. Carl Sable Fall 2003.
Syntax-Directed Translation
Topic: Syntax Directed Translations
COP4020 Programming Languages Semantics Prof. Xin Yuan.
Chapter 8: Intermediate Code Generation
Intermediate Code Generation
Overview of Previous Lesson(s) Over View  An ambiguous grammar which fails to be LR and thus is not in any of the classes of grammars i.e SLR, LALR.
1 Semantic Analysis. 2 Semantic Analyzer Attribute Grammars Syntax Tree Construction Top-Down Translators Bottom-Up Translators Recursive Evaluators Type.
1 June 3, June 3, 2016June 3, 2016June 3, 2016 Azusa, CA Sheldon X. Liang Ph. D. Computer Science at Azusa Pacific University Azusa Pacific University,
Chapter 5: Syntax directed translation –Use the grammar to direct the translation The grammar defines the syntax of the input language. Attributes are.
Review: Syntax directed translation. –Translation is done according to the parse tree. Each production (when used in the parsing) is a sub- structure of.
Overview of Previous Lesson(s) Over View  In syntax-directed translation 1 st we construct a parse tree or a syntax tree then compute the values of.
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.
國立台灣大學 資訊工程學系 薛智文 98 Spring Syntax-Directed Translation (textbook ch#5.1–5.6, 4.8, 4.9 )
Syntax Directed Definition and Syntax directed Translation
UNIT – 5 SYNTAX-DIRECTED TRANSLATION
Syntax-Directed Definitions and Attribute Evaluation Compiler Design Lecture (02/18/98) Computer Science Rensselaer Polytechnic.
Copyright © 2009 Elsevier Chapter 4 :: Semantic Analysis Programming Language Pragmatics Michael L. Scott.
Chapter 8: Semantic Analyzer1 Compiler Designs and Constructions Chapter 8: Semantic Analyzer Objectives: Syntax-Directed Translation Type Checking Dr.
SDTs used to implement SDDs A non-cyclic SDD (having definitions of attributes) can always be implemented by a SDT (having actions that assign values to.
Semantic Analysis Attribute Grammar. Semantic Analysis  Beyond context free grammar  Is x declared before it is used?  Is x declared but never used?
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 Syntax-Directed Translation Part II Chapter 5 COP5621 Compiler Construction Copyright Robert van Engelen, Florida State University, 2005.
Semantic analysis Jakub Yaghob
Semantics Analysis.
Chapter 5: Syntax Directed Translation
Syntax-Directed Translation
Compiler Construction
Chapter 5 Syntax Directed Translation
Abstract Syntax Trees Lecture 14 Mon, Feb 28, 2005.
Syntax-Directed Translation Part I
Syntax-Directed Translation Part II
Chapter 5. Syntax-Directed Translation
Syntax-Directed Translation Part I
Syntax-Directed Translation Part I
Syntax-Directed Definition
SYNTAX DIRECTED TRANSLATION
פרק 5 תרגום מונחה תחביר תורת הקומפילציה איתן אביאור.
Syntax-Directed Translation Part II
Compilers Principles, Techniques, & Tools Taught by Jing Zhang
Syntax-Directed Translation Part II
Syntax-Directed Translation Part I
SYNTAX DIRECTED DEFINITION
Syntax-Directed Translation Part II
Directed Acyclic Graphs (DAG)
Intermediate Code Generation Part I
Syntax-Directed Translation Part I
Chapter 5 Syntax Directed Translation
Presentation transcript:

Chapter 5. Syntax-Directed Translation

2 Fig Syntax-directed definition of a simple desk calculator ProductionSemantic Rules L  E n print ( E.val ) E  E 1 + T E.val := E 1.val + T.val E  TE  T E.val := T.val T  T 1 * F T.val := T 1.val + F.val T  FT  F T.val := F.val F  ( E ) F.val := E.val F  digit F.val := digit.lexval

3 Fig Annotated parse tree for 3*5+4 n.

4 Fig Syntax-directed definition with inherited attribute L.in. ProductionSemantic Rules D  T L L.in := T.type T  int T.type := integer T  real T.type := real L  L 1, id L 1.in := L.in addtype ( id.entry, L.in ) L  id addtype ( id.entry, L.in )

5 Fig Parse tree with inherited attribute in at each node labeled L.

6 Fig E.val is synthesized from E 1.val and E 2.val

7 Fig Dependency graph for parse tree of Fig. 5.5

8 Fig Syntax-directed definition for constructing a syntax tree for an expression ProductionSemantic Rules 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  ( E ) T  id T.nptr := E.nptr T.nptr := mkleaf (id, id.entry) T  num T.nptr := mkleaf (num, num.val)

9 Fig Construction of a syntax-tree for a-4+c

10 Fig Dag for the expression a+a*(b-c)+(b-c)*d.

11 Fig Instructions for constructing the dag of Fig (1) p 1 := mkleaf ( id, a ) (2) p 2 := mkleaf ( id, a ) (3) p 3 := mkleaf ( id, b ) (4) p 4 := mkleaf ( id, c ) (5) p 5 := mknode ( ‘-’, p 3, p 4 ) (6) p 6 := mknode ( ‘*’, p 2, p 5 ) (7) p 7 := mknode ( ‘+’, p 1, p 6 ) (8) p 8 := mkleaf ( id, b ) (9) p 9 := mkleaf ( id, c ) (10) p 10 := mknode ( ‘-’, p 8, p 9 ) (11) p 11 := mkleaf ( id, d ) (12) p 12 := mknode ( ‘*’, p 10, p 11 ) (13) p 13 := mknode ( ‘+’, p 7, p 12 )

12 Fig Parser stack with a field for synthesized attributes

13 Fig Implementation of a desk calculator with an LR parser. ProductionCode Fragment L  E n print ( val [top] ) E  E 1 + T val [ntop] := val [top – 2]+val [top] E  TE  T T  T 1 * F val [ntop] := val [top – 2]×val [top] T  FT  F F  ( E ) val [ntop] := val [top – 1] F  digit

14 L-Attributed Definitions A syntax-directed definition is L-attribute if each inherited attribute of X j, 1≤ j≤n, on the right side of A → X 1 X 2 · · · X n, depends only on 1. the attributes of the symbols X 1, X 2, · · ·, X j-1 to the left of X j in the production and 2.the inherited attributes of A. Note that every S-attributes definition is L-attributed, because the restrictions (1) and (2) apply only to inherited attributes

15 Example The type of an identifier can be passed by copy rules using inherited attributes as shown in Fig (adapted from Fig. 5.7). We shall first examine the moves made by a bottom-up parser on the input real p, q, r then we show how the value of attirbute T.type can be accessed when the productions for L are applied. The translation scheme we wish to implement is D  T L{ L.in := T.type } T  int{ T.type := integer } T  real{ T.type := real } L  { L 1.in := L.in } L 1, id{ addtype ( id.entry, L.in ) } L  id{ addtype ( id.entry, L.in ) }

16 If we ignore the actions in the above translation scheme, the sequence of moves made by the parser on the input of Fig is as in Fig For clarity, we show the corresponding grammar symbol instead of a stack state and the actual identifier instead of the token id. Fig At each node for L, L.in = T.type.

17 Fig Whenever a right side for L is reduced, T is just below the right side. InputstateProduction Used real p,q,r − p,q,r real p,q,r T T → real,q,r T p,q,r T L L → id q,r T L,,r T L, q,r T L L → L, id r T L, T L, r T L L → L, id D D → T L

18 Fig The value of T.type is used in place of L.in ProductionCode Fragment D  T L ; T  int val [ntop] := integer T  real val [ntop] := real L  L 1, id addtype (val [top], val [top−3] ) L  id addtype (val [top], val [top−1] )

19 Example As an instance where we cannot predict the position, consider the following translation scheme: (5.6) C inherits the synthesized attribute A.s by a copy rule. Note that there may or may not be a B between A and C in the stack. When reduction by C → c is performed, the value of C.i is either in val [top−1]or in val [top−2], but it is not clear which case applies. ProductionSemantic Rules S → aAC C.i := A.s S → bABC C.i := A.s C → c C.s := g ( C.i )

20 Fig Copying an attribute value through a marker M. ProductionSemantic Rules S → aAC C.i := A.s S → bABMC M.i := A.s ; C.i := M.s C → c C.s := g ( C.i ) M → єM → є M.s := M.i є (a) original production(b) modified dependencies

21 Fig Semantic rules generating code for a while statement ProductionSemantic Rules S -> while E do S 1 S.begin := newlabel ; S.after := newlabel ; S.code := gen( S.begin ‘ :’) || E.code || gen( ‘ if ’ E.place ‘ = ‘ ‘ 0 ’ ‘ goto’ S.after ) || S 1.code || gen(‘ goto’ S.begin ) || gen( S.after ‘ : ‘ )