Download presentation
Presentation is loading. Please wait.
Published byGarey Baldwin Modified over 9 years ago
1
CS784 (Prasad)L167AG1 Attribute Grammars Attribute Grammar is a Framework for specifying semantics and enables Modular specification. http://knoesis.wright.edu/tkprasad/papers/Attribute-Grammars.pdf
2
CS784 (Prasad)L167AG2 “Correct” Programs (no run-time errors) Regular (lexer) Context-free (parser) Context-sensitive (type-checker)
3
CS784 (Prasad)L167AG3 Semantics of Bit Pattern : 0101110 Number –46 (if base 2) –101110 (if base 10) Fraction –23/64 Unary encoding “13” ASCII Character “. ” Switch positions –ON-OFF-ON-… Binary string “0101110”
4
CS784 (Prasad)L167AG4 Motivation for Precise Specification Capture subtly different semantics for the same syntax in various languages. Arrays and strings. Parameter passing mechanisms. Scoping rules. Primitive types vs Composite types. Type equivalence.
5
CS784 (Prasad)L167AG5 Attribute Grammars Formalism for specifying semantics based on context-free grammars (BNF) Static semantics (context-sensitive aspects) Type checking and type inference Compatibility between procedure definition and call Scope rules Dynamic semantics Associate attributes with terminals and non-terminals Associate attribute computation rules with productions
6
CS784 (Prasad)L167AG6 Synthesized Attributes N N val val val N val val N val
7
CS784 (Prasad)L167AG7 Derivation Tree N N N 1 1 0 110 ~> 6
8
CS784 (Prasad)L167AG8 Synthesized Attributes N N val len val len val N val len N len val N val ^ N len len N len + 1
9
CS784 (Prasad)L167AG9 Inherited Attributes Declaration and Use { int i, j, k; i := i + j + j; } :=. env :=. env
10
CS784 (Prasad)L167AG10 Inherited Attributes Coercion Code Generation 5.0 + 2 coerce_int_to_real Determination of un-initialized variables Determination of reachable non-terminals Evaluation of an expression containing variables
11
CS784 (Prasad)L167AG11 AttributesAttributes A( X ) –Synthesized S( X ) –Inherited I( X ) Attribute computation rulesAttribute computation rules (Semantic functions) X0 -> X1 X2 … Xn S( X0 ) = f ( I( X0 ), A( X1 ), A( X2 ), …, A( Xn ) ) I( Xj ) = G j ( I( X0 ), A( X1 ), A( X2 ), …, A( Xj-1 )) for all j in 1..n P ( A( X0 ), A( X1 ), A( X2 ), …, A( Xn ) )
12
CS784 (Prasad)L167AG12 Information Flow inherited synthesized... computed available available
13
CS784 (Prasad)L167AG13 Synthesized AttributesSynthesized Attributes Pass information up the parse tree Inherited AttributesInherited Attributes Pass information down the parse tree or from left siblings to the right siblings Attribute values assumed to be available from the context. Attribute values computed using the semantic rules provided. The constraints on the attribute evaluation rules permit top-down left-to-right (one-pass) traversal of the parse tree to compute the meaning.
14
CS784 (Prasad)L167AG14 Static Semantics E -> n | m E -> x | y E -> E1 + E2 E -> E1 * E2 E.type int E.type real if E1.type E2.type then E.type E1.type else E.type real
15
CS784 (Prasad)L167AG15 Executable Specification in Prolog type(i, int ). type(x, real ). type(+(E,F),T) :- type(E,T), type(F,T). type(+(E,F), real ) :- type(E,T1), type(F,T2), T1 \= T2. Type Checking ?- type(+(i,x),real). Type Inference ?- type(+(x,x),T).
16
CS784 (Prasad)L167AG16 Static Semantics E -> n | m E -> p | q E -> if E0 then E1 else E2 E.type int E.type bool if ( E0.type bool ) ( E1.type = E2.type ) then E.type E1.type else type error
17
CS784 (Prasad)L167AG17 Fractions F N N F.val N.val N.pow 1 N.val N.val 1/2^N.pow) N.pow 1 + N.pow N.val N val N.pow 1 + N.pow N.val N val + (1/2^N.pow)
18
CS784 (Prasad)L167AG18 Fractions (Alternate solution) F N N F.val N.val 2 N.val N.val N.val N val 2 + 1
19
CS784 (Prasad)L167AG19 Applications of Attribute Grammars Compiler Generation –Top-down Parsers (LL(1)) FIRST sets, FOLLOW sets, etc –Code Generation Computations Type, Storage determination, etc Databases –Optimizing Bottom-up Query Evaluation (Magic Sets) Programming and Definitions
20
CS784 (Prasad)L167AG20 An Extended Example Distinct identifiers in a straight-line program. BNF ::= | + ::= := | ; Attributes id ids ids num Semantics specified in terms of sets (of identifiers).
21
CS784 (Prasad)L167AG21 ::=.ids = {.id } ::= +.ids =.ids U.ids ::= :=.ids ={.id } U.ids.num = |.ids | ::= ;.ids =.ids U.ids.num = |.ids |
22
CS784 (Prasad)L167AG22 Alternate approach : Using lists Attributes envi : list of vars in preceding context envo : list of vars for following context dnum : number of new variables ::=.envo = if member(.id,.envi) then.envi else cons(.id,.envi)
23
CS784 (Prasad)L167AG23 ::= + envi envi envi envo envo envo dnum dnum dnum.envi =.envi.envi =.envo.envo =.envo.dnum = length(.envo) Attribute Computation Rules
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.