Presentation is loading. Please wait.

Presentation is loading. Please wait.

Semantic Analysis Chapter 6.

Similar presentations


Presentation on theme: "Semantic Analysis Chapter 6."— Presentation transcript:

1 Semantic Analysis Chapter 6

2 Two Flavors Static (done during compile time)
Ada Dynamic (done during run time) LISP Smalltalk Optimization

3 Static Semantic Analysis
Build symbol table Keep track of declarations Perform type checking

4 Static Analysis Description Implementation Attributes (properties)
Attribute equations (semantic rules) Application of rules Syntax-directed semantics

5 General Attribute Property of the Language Data type (compile time)
Value of expressions (run time) Location of variables (compile time) Object code of procedure (compile time) Number of Significant digits (design time)

6 Specific Attributes Parameters/Arguments type
Parameters/Arguments number Array subscript type Array subscript number Continue with no place to continue to Variable undeclared Variable duplicately declared Scope Incorrect structure reference

7 Specific Attributes Cont.
Break inappropriate Incorrect Return Wrong type Array None when needed (void) No main Two main’s Constant on left side Expression types

8 Binding Time of Attributes
Static - prior to execution Fortran Dynamic - during execution Combination C Java Pascal

9 Attribute Grammars X is grammar symbol, Xa is an attribute for this symbol XABCD (grammar) X.x = A.a B.b C.c D.d (attribute grammar)

10 Attribute Grammar Example
E1  E2 + T E1.type = E2.type + T.type

11 Attribute Grammar Example
E1  E2 + T E1.tree = mkOpNode(+, E2.tree, T.tree) E  T E.tree = T.tree F  number F.tree = mkNumNode(number.lexval)

12 Symbol Tables Keep track of identifiers
Must deal with scope efficiently

13 Static vs Dynamic Scope compile time or run time
int i = 1; void f(void) { printf(“%d\n”,i); } void main(void) { int i = 2; f(); return; What is printed?

14 Kinds of Declarations Sequential – each declaration is available starting with the next line C Collateral – each declaration is evaluated in the environment preceding the declaration group. Declared identifiers are available only after all finishes. scheme ML Recursive - requires the function name to be added to the symbol table before processing the body of the function. C functions and type declarations are recursive.

15 Example - Sequential/Colateral order is not important with in group
int i = 1; void f(void) { int i = 2, j = i + 1; } Is j 2 or 3?

16 Example - Recursive int gcd(int n, int m) { if (m == 0) return n;
else return gcd(m, n%m); } gcd must be added to the symbol table before processing the body

17 Example - Recursive void f(void) { … g() … } void g(void) { … f() … }
Resolved by using prototype. Some languages have issue with using g before g is defined. (pascal)

18 Data Types – Type Checking
Explicit datatype int x Implicit datatype #define x 5

19 Implementation of Types
Hardware implementation int double float Software implementation boolean char enum – can be integers to save space

20 More Complicated Types
Arrays base(b)+i*esize base(ar)+(i1*r2 +i2)*esize Records allocate memory sequentially base+displacement

21 Equivalence of type Expressions
Structural Equivalence two expressions are either the same basic type, or are formed by applying the same constructor to structurally equivalent types. I.E. equivalent only if they are identical. Example typedef link = *cell link next; cell * p; Name Equivalence two expressions use the same name

22 Name Equivalence typedef int t1; typedef int t2;
t2 and t1 are not the same type. int typeEqual(t1, t2) { if (t1 and t2 are simple types) return t1 == t2; if (t1 and t2 are type names) else return 0;} in case you read the text

23 Name Equivalence typedef int t1; typedef int t2; t2 x; t2 y; t1 z;
x and y are the same type. z is not the same type.


Download ppt "Semantic Analysis Chapter 6."

Similar presentations


Ads by Google