Lecture#17 - cse344compilerdesign

advertisement
Lecture # 17
Syntax Directed Definition
Translation Schemes
• A translation scheme is a CF grammar
embedded with semantic actions
rest  + term { print(“+”) } rest
Embedded
semantic action
rest
+
term
{ print(“+”) }
rest
2
Example Translation Scheme
expr  expr + term
expr  expr - term
expr  term
term  0
term  1
…
term  9
{ print(“+”) }
{ print(“-”) }
{ print(“0”) }
{ print(“1”) }
…
{ print(“9”) }
3
Example Translation Scheme (cont’d)
expr
+
expr
expr
-
{ print(“+”) }
term
{ print(“-”) }
term
{ print(“2”) }
2
{ print(“5”) }
term
5
{ print(“9”) }
9
Translates 9-5+2 into postfix 95-2+
4
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
5
Synthesized Versus Inherited
Attributes
• Given a production
A
then each semantic rule is of the form
b := 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 
6
Synthesized Versus Inherited
Attributes (cont’d)
Production
Semantic Rule
DTL
T  int
…
L  id
L.in := T.type
T.type := ‘integer’
…
… := L.in
inherited
synthesized
7
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
8
Example Attribute Grammar with
Synthesized+Inherited Attributes
Synthesized:
Inherited:
Production
Semantic Rule
DTL
T  int
T  real
L  L1 , id
L  id
L.in := T.type
T.type := ‘integer’
T.type := ‘real’
L1.in := L.in; addtype(id.entry, L.in)
addtype(id.entry, L.in)
T.type, id.entry
L.in
9
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
Semantic Rules
• A 0
• A.val=0 A.pos=S.pos
• A.decval= A.val *2pos
• A 1
• A.val=1 A.pos=S.pos
• A.decval= A.val *2pos
• S €
•
• S.pos = 0
• S.pos=S.pos+1
• S.decval= A.decval+S.decval
S.pos =S.pos
Download