Upload
gwendoline-ford
View
212
Download
0
Embed Size (px)
Citation preview
Lecture # 17
Syntax Directed Definition
2
Translation Schemes
• A translation scheme is a CF grammar embedded with semantic actions
rest + term { print(“+”) } rest
Embeddedsemantic action
rest
term rest+ { print(“+”) }
3
Example Translation Scheme
expr expr + termexpr expr - termexpr termterm 0term 1…term 9
{ print(“+”) }{ print(“-”) }
{ print(“0”) }{ print(“1”) }…{ print(“9”) }
4
Example Translation Scheme (cont’d)
expr
term
9
-
5
+
2
expr
expr term
term
{ print(“-”) }
{ print(“+”) }
{ print(“9”) }
{ print(“5”) }
{ print(“2”) }
Translates 9-5+2 into postfix 95-2+
5
Attributes
• Attribute values may represent– Numbers (literal constants)– Strings (literal constants)– Memory locations, such as a frame index of a local
variable or function argument– A data type for type checking of expressions– Scoping information for local declarations– Intermediate program representations
6
Synthesized Versus Inherited Attributes
• Given a productionA
then each semantic rule is of the formb := f(c1,c2,…,ck)
where f is a function and ci are attributes of A and , and either– b is a synthesized attribute of A– b is an inherited attribute of one of the grammar
symbols in
7
Synthesized Versus Inherited Attributes (cont’d)
D T LT int…L id
L.in := T.typeT.type := ‘integer’…… := L.in
Production Semantic Rule inherited
synthesized
8
S-Attributed Definitions
• A syntax-directed definition that uses synthesized attributes exclusively is called an S-attributed definition (or S-attributed grammar)
• A parse tree of an S-attributed definition is annotated with a single bottom-up traversal
9
Example Attribute Grammar with Synthesized+Inherited Attributes
D T LT intT realL L1 , idL id
L.in := T.typeT.type := ‘integer’T.type := ‘real’ L1.in := L.in; addtype(id.entry, L.in)addtype(id.entry, L.in)
Production Semantic Rule
Synthesized: T.type, id.entryInherited: L.in
Example
• Write Syntax Directed Definitions to convert a binary string to decimal value
• Solution:– First we would think of synthesized and inherited
attributes required. We identified three variables namely “var” for holding binary vale, “decval” for holding decimal value and “pos” for the place value
Example (contd)
Productions• S A S
• A 0
• A 1
• S €
Semantic Rules• S.pos = 0• S.pos=S.pos+1• S.decval= A.decval+S.decval
• A.val=0 A.pos=S.pos• A.decval= A.val *2pos
• A.val=1 A.pos=S.pos• A.decval= A.val *2pos
• S.pos =S.pos