Professional Documents
Culture Documents
Attributes Handout PDF
Attributes Handout PDF
Compilers
Attribute Grammars
CSE 304/504
1 / 21
Compilers
Attribute Grammars
CSE 304/504
2 / 21
E
E
E
E
E
E
E * E
E + E
id
E1 * E2
E1 + E2
int
Compilers
Attribute Grammars
CSE 304/504
3 / 21
Decl
Type
Type
VarList
VarList
Decl
Type
Type
VarList
Type VarList
integer
float
id , VarList 1
VarList
id
Compilers
Type VarList
integer
float
id , VarList
id
{VarList.type := Type.type}
{Type.type := int}
{Type.type := float}
{VarList 1 .type := VarList.type;
id.type := VarList.type}
{id.type := VarList.type}
Attribute Grammars
CSE 304/504
4 / 21
Attributes
Compilers
Attribute Grammars
CSE 304/504
5 / 21
Syntax-Directed Definition
Compilers
Attribute Grammars
CSE 304/504
6 / 21
Compilers
Attribute Grammars
CSE 304/504
7 / 21
E
E
E
E
E
E
Compilers
E1 * E2
E1 + E2
int
E * E
E + E
int
{E .val := E1 .val E2 .val}
{E .val := E1 .val + E2 .val}
{E .val := int.val}
Attribute Grammars
CSE 304/504
8 / 21
2 E
3 int
3
5 int
2 int
*
2 +
Compilers
Attribute Grammars
CSE 304/504
9 / 21
Decl
Type
Type
VarList
VarList
Decl
Type
Type
VarList
Type VarList
integer
float
id , VarList 1
VarList
id
Compilers
Type VarList
integer
float
id , VarList
id
{VarList.type := Type.type}
{Type.type := int}
{Type.type := float}
{VarList 1 .type := VarList.type;
id.type := VarList.type}
{id.type := VarList.type}
Attribute Grammars
CSE 304/504
10 / 21
Type
int
integer
int VarList
int id
VarList int
id
integer
Compilers
int
Attribute Grammars
CSE 304/504
11 / 21
Compilers
E
E
E
E1 * E2
E1 + E2
int
E
E
E
: E MULT E
: E PLUS E
: INT
Attribute Grammars
CSE 304/504
12 / 21
Compilers
Attribute Grammars
CSE 304/504
13 / 21
CSE 304/504
14 / 21
Compilers
int
E
E *
E * int
E
E +
E + int
E +E
E
E +E
E *E
int
Input Stream
3 * 2 + 5$
* 2 + 5$
* 2 + 5$
2 + 5$
+ 5$
+ 5$
5$
$
$
$
Attribute Grammars
Attributes
$
$3
$3
$3
$32
$6
$6
$65
$$65
$ 11
Inherited Attributes
Ss
Ss
B
S
S
Ss S ; Ss 1
Ss
B
S
S
{ Ss }
B
other
Compilers
S ; Ss
{ Ss }
B
other
{S.block = Ss.block;
Ss 1 .block = Ss.block; }
{Ss.block = child(B.block); }
{B.block = S.block; }
{other.block = S.block; }
Attribute Grammars
CSE 304/504
15 / 21
Attribute Grammars
CSE 304/504
16 / 21
Top-down Parsing
parse Ss() {
/* production 1 */
parse S();
parse Ss();
return;
/* production 2 */
return;
}
parse B() {
consume(OPEN BRACE);
parse Ss();
consume(CLOSE BRACE);
}
Compilers
Compilers
Attribute Grammars
CSE 304/504
17 / 21
Compilers
Attribute Grammars
CSE 304/504
18 / 21
Compilers
Attribute Grammars
CSE 304/504
19 / 21
Compilers
Attribute Grammars
CSE 304/504
20 / 21
B
M1
M2
{
M1
Ss
M2
S ; Ss
{ Ss }
B
other
}
{ current block++;}
{ current block;}
Compilers
Attribute Grammars
CSE 304/504
21 / 21