Professional Documents
Culture Documents
Lecture3 PDF
Lecture3 PDF
c
Size (<a seq>) = Size (<b seq>) = Size (<c seq>)
c
Size =
<c seq>
c
Size =
Impose a condition on the first production.
<c seq>
Size =
<c seq>
<string>
c
Size =
condition:
b
Size =
Size(<a seq>) 1
<b seq>
Size =
| <a seq>2 a
condition:
Size =
<b seq>
Size =
Size(<b seq>) 1
a
<a seq>
| <b seq>2 b
Size =
Size(<c seq>) 1
| <c seq>2 c
<a seq>
Chapter 3 3 Chapter 3 4
Using an Inherited Attribute
Size =
Attach a synthesized attribute Size to <a seq>
c
and inherited attributes InSize to <b seq> and
Size (<a seq>) = Size (<b seq>) = Size (<c seq>)
<c seq>
<c seq>.
Size =
<c seq>
<string> ::= <a seq> <b seq> <c seq>
c
InSize(<b seq>) Size(<a seq>)
InSize(<c seq>) Size(<a seq>)
Size =
<string>
b
<a seq> ::= a
<b seq>
Size(<a seq>) 1
Size =
a <b seq> | <a seq>2 a
Size(<a seq>) Size(<a seq>2)+1
b
<b seq> ::= b
Size =
condition:
condition:
<a seq>
InSize(<b seq>) = 1
Size =
| <b seq>2 b
InSize(<b seq>2) InSize(<b seq>)-1
a
<a seq>
Size =
InSize(<c seq>) = 1
a
| <c seq>2 c
InSize(<c seq>2) InSize(<c seq>)-1
Chapter 3 5 Chapter 3 6
Definition
condition: InSize =1
InSize =
<b seq>
InSize =
Chapter 3 7 Chapter 3 8
For each syntactic category X N in the Consider again a production p P of the form:
grammar, there are two finite disjoint sets: X0 ::= X1 X2 Xnp
I(X) of inherited attributes
, and Derivation Tree:
S(X) of synthesized attributes
. X0
I(S) = where S is the start symbol.
The values of attributes are defined by semantic Each inherited attribute Atb I(Xk) for 1 k np
functionsor semantic rulesassociated with the has its value defined in terms of the attributes in
productions in P. A(X0) S(X1) S(Xnp).
Chapter 3 9 Chapter 3 10
<bit>
Pos :
Val :
1
<fraction digits>
<fraction digits> ::= <fraction digits>2 <bit>
Val(<fraction digits>)
Val(<fraction digits>2) + Val(<bit>)
<bit>
Pos :
Len :
Val :
Val :
0
Len(<fraction digits>)
<fraction digits>
Len(<fraction digits>2) + 1
<bit>
Pos :
Val :
<binary numeral>
1
<fraction digits>
Pos(<bit>) Len(<fraction digits>)
Len :
Val :
<fraction digits> ::= <bit>
<fraction digits>
Len :
Val :
Val(<fraction digits>) Val(<bit>)
Val :
Len(<fraction digits>) 1
<bit>
Pos :
Val :
1
<binary digits>
Len :
Pos(<bit>) 1
Val :
<bit>
Pos :
Val :
1
<bit> ::= 0
Pos :
Val :
<binary digits>
Val(<bit>) 0
<bit> ::= 1
Pos :
Val :
<bit>
Pos :
Val :
1
Val(<bit>) 2Pos (<bit>)
<bool expr> ::= <bool expr>2 or <bool term> <bool term> ::= <bool term>2 and <bool elem>
Symbol-table(<bool expr>2) Symbol-table(<bool term>2)
Symbol-table(<bool expr>) Symbol-table(<bool term>)
Symbol-table(<bool term>) Symbol-table(<bool elem>)
Symbol-table(<bool expr>) Symbol-table(<bool term>)
Type(<bool expr>2) Type(<bool expr>) Type(<bool term>2) Type(<bool term>)
Type(<bool term>) Type(<bool expr>) Type(<bool elem>) Type(<bool term>)
Chapter 3 25 Chapter 3 26
Chapter 3 29 Chapter 3 30
Command Sequence
Read Command
<cmd seq> ::= <command>
Symbol-table(<cmd>) <cmd> ::= read <variable>
Symbol-table(<cmd seq>) condition:
case lookup-type(Name(<variable>),
<cmd seq> ::= <command> ; <cmd seq>2 Symbol-table(<cmd>)) is
Symbol-table(<cmd>) integer : error()
Symbol-table(<cmd seq>) undefined : error(Variable not declared)
Symbol-table(<cmd seq>2) boolean, program : error(Integer var
Symbol-table(<cmd seq>) expected for read)
command([ide(V),assign,E,ErrorMsg], Expressions
Symtab) -->
[ide(V)], [assign], <expr> ::= <integer expr>
{ lookupType(V,SymbolTable,VarType) }, Symbol-table(<int expr>)
({ VarType = integer }, Symbol-table(<expr>)
(expr(E,Symtab,integer), Type(<int expr>) Type(<expr>)
{ ErrorMsg=noError } condition: Type(<expr>) { boolean }
; expr(E,Symtab,boolean),
{ ErrorMsg='ERROR: Int expr expected' }) <expr> ::= <boolean expr>
; Symbol-table(<bool expr>)
{ VarType = boolean }, Symbol-table(<expr>)
(expr(E,Symtab,boolean), Type(<int expr>) Type(<expr>)
{ ErrorMsg=noError }
; expr(E,Symtab,integer), condition: Type(<expr>) { integer }
{ ErrorMsg='ERROR: Bool expr expected' })
;
{ VarType = undefined, expr(E,SymbolTable,integer) -->
ErrorMsg='ERR: Target of asgn not decd' intexpr(E,SymbolTable,integer).
; expr(E,SymbolTable,boolean) -->
VarType = program, boolexpr(E,SymbolTable,boolean).
ErrorMsg='ERR: Prog name used as var' }
expr(E,SymbolTable,undefined) -->
expr(E,Symtab,undefined)).
intexpr(E,SymbolTable,undefined).
expr(E,SymbolTable,undefined) -->
boolexpr(E,SymbolTable,undefined).
Chapter 3 35 Chapter 3 36
Integer Expressions Terms
<int expr> ::= <int expr>2 <weak op> <term> <term> ::= <term>2 <strong op> <element>
Symbol-table(<int expr>2) Symbol-table(<term> 2 )
Symbol-table(<term>)
Symbol-table(<int expr>)
Symbol-table(<term>) Symbol-table(<element>)
Symbol-table(<int expr>) Symbol-table(<term>)
Type(<int expr>2) Type(<int expr>) Type(<term>2) Type(<term>)
Type(<term>) Type(<int expr>) Type(<element>) Type(<term>)