Presentation is loading. Please wait.

Presentation is loading. Please wait.

CS784 (Prasad)L167AG1 Attribute Grammars Attribute Grammar is a Framework for specifying semantics and enables Modular specification.

Similar presentations


Presentation on theme: "CS784 (Prasad)L167AG1 Attribute Grammars Attribute Grammar is a Framework for specifying semantics and enables Modular specification."— Presentation transcript:

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


Download ppt "CS784 (Prasad)L167AG1 Attribute Grammars Attribute Grammar is a Framework for specifying semantics and enables Modular specification."

Similar presentations


Ads by Google