24
1 Compiler Construction (CS-636) Muhammad Bilal Bashir UIIT, Rawalpindi

1 Compiler Construction (CS-636) Muhammad Bilal Bashir UIIT, Rawalpindi

Embed Size (px)

Citation preview

Page 1: 1 Compiler Construction (CS-636) Muhammad Bilal Bashir UIIT, Rawalpindi

1

Compiler Construction (CS-636)

Muhammad Bilal BashirUIIT, Rawalpindi

Page 2: 1 Compiler Construction (CS-636) Muhammad Bilal Bashir UIIT, Rawalpindi

Outline

1. Semantic Analysis

2. Attributes

3. Attribute Grammars

4. The Symbol Table

5. Summary

2

Page 3: 1 Compiler Construction (CS-636) Muhammad Bilal Bashir UIIT, Rawalpindi

Semantic Analysis

Lecture: 13-14

3

Page 4: 1 Compiler Construction (CS-636) Muhammad Bilal Bashir UIIT, Rawalpindi

Practical Work

Write pseudo code for Recursive Descent parsing algorithm

A A ( A ) | a

4

Page 5: 1 Compiler Construction (CS-636) Muhammad Bilal Bashir UIIT, Rawalpindi

The Compiler So Far

Scanner - Lexical analysis Detects inputs with illegal tokens

e.g.: int @#5$;

Parser - Syntactic analysis Detects inputs with ill-formed parse trees

e.g.: missing semicolons

Semantic analysis Last “front end” analysis phase Catches all remaining errors

5

Page 6: 1 Compiler Construction (CS-636) Muhammad Bilal Bashir UIIT, Rawalpindi

Semantic Analysis

6

Source code

Lexical Analysis

Syntactic Analysis

Semantic Analysis

Intermediate Code Gen

lexical errors

syntax errors

semantic errors

tokens

AST

AST’

Page 7: 1 Compiler Construction (CS-636) Muhammad Bilal Bashir UIIT, Rawalpindi

Beyond Syntax

7

foo(int a, char * s){ … }

int bar() { int f[3]; int i, j, k; char *p; float k; foo(f[6], 10, j); break; i->val = 5; j = i + k; printf(“%s,%s.\n”,p,q); goto label23;}

What’s wrong with this code?

(Note: it parses perfectly)

Semantic Analysis

Page 8: 1 Compiler Construction (CS-636) Muhammad Bilal Bashir UIIT, Rawalpindi

Semantic Analysis

Semantic analysis computes additional information about the program which is beyond the capabilities of CFG and parsing algorithms The computed information is closely related to eventual

meaning or semantics of the program being translated Since this analysis by compiler is by definition static,

so it is also called static semantic analysis Static semantic analysis involves both description

of the analyses to perform and the implementation of the analyses using appropriate algorithm

8

Page 9: 1 Compiler Construction (CS-636) Muhammad Bilal Bashir UIIT, Rawalpindi

Semantic Analysis (Continue…)

One method of describing semantic analysis is to identify attributes of language entities

After identifying attributes, write attribute equation, or semantic rules that express how the computation of such attributes is related to the grammar rules of the language

Such a set of attributes and equations is called an attribute grammar

Attribute grammars are most useful for languages that obey the principle of syntax-directed semantics

9

Page 10: 1 Compiler Construction (CS-636) Muhammad Bilal Bashir UIIT, Rawalpindi

Attributes

An attribute is any property of the programming language construct The data type of a variable The value of an expression The location of a variable in the memory The object code of a procedure The number of significant digits in a number

Attributes may be fixed prior to the compilation process and they may be only determinable during program execution

10

Page 11: 1 Compiler Construction (CS-636) Muhammad Bilal Bashir UIIT, Rawalpindi

Attributes (Continue…)

The process of computing an attribute and associating the computed value with the language construct in question is called binding of attribute

The time during the compilation/execution process when the binding of an attribute occurs is called its binding time

Attributes that can be bound prior execution are static and attributes that can only be bound during execution are dynamic

11

Page 12: 1 Compiler Construction (CS-636) Muhammad Bilal Bashir UIIT, Rawalpindi

Attribute Grammars

In syntax-directed semantics, the attributes are associated directly with grammar symbols of the language

If X is a grammar symbol, and a is an attribute associated to X, the we write X a for the value of a associated to X

Given a collection of attributes a1,…,ak, the principle of syntax-directed semantics implies that for each grammar rule X0 → X1 X2 … Xn, values of attributes Xiaj of each grammar symbol Xi are related to the values of attributes of other symbols in the rule

12

Page 13: 1 Compiler Construction (CS-636) Muhammad Bilal Bashir UIIT, Rawalpindi

Attribute Grammars (Continue…)

Should the same symbol Xi appear more than once in the grammar rule, then each occurrence must be distinguished from the other occurrences by suitable subscription

Each relationship is specified by an attribute equation or semantic rule of the form:

Xiaj = fij(X0a1,…,X0ak.X1a1,…,X1ak,…,Xna1,…,Xnak)

An attribute grammar for the attributes a1,…,ak is the collection of all such equations for all the grammar rules of the language

13

Page 14: 1 Compiler Construction (CS-636) Muhammad Bilal Bashir UIIT, Rawalpindi

Attribute Grammars (Continue…)

In the attribute grammar generality, attribute grammars may appear to be extremely complex but it is not the case because usually the functions fij are quire simple

It is rare of attributes to depend on large number of other attributes, and so attributes can be separated into small independent sets of independent attributes and grammar can be written for them

Typically, attribute grammars are written in tabular form, with each grammar rule listed with the set of attribute equations, associated to the rule

14

Page 15: 1 Compiler Construction (CS-636) Muhammad Bilal Bashir UIIT, Rawalpindi

Attribute Grammars (Continue…)

Grammar Rule Semantic Rules

Rule 1...Rule n

Associated attribute equations

Associated attribute equations

15

Below is a general form of attribute grammar in tabular form

Page 16: 1 Compiler Construction (CS-636) Muhammad Bilal Bashir UIIT, Rawalpindi

Example – Attribute Grammars Consider the following grammar for unsigned

numbers

number number digit | digit

digit 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

The most significant attribute of the digit is its value, which we give the name val

Each digit has a value which we directly compute from the actual digit it represents Thus grammar rule digit 0 implies that digit has value 0

16

Page 17: 1 Compiler Construction (CS-636) Muhammad Bilal Bashir UIIT, Rawalpindi

Example – Attribute Grammars (Continue…) For grammar rule digit 0, we can write its attribute

equation as digit.val = 0 and associate it with that rule

Furthermore each number has a value based on the digit it contains e.g. number digit that shows number contains just one digit and in this case the attribute equation will be number.val = digit.val

In case number contains more than just one digit then it is derived from number number digit grammar rule

17

Page 18: 1 Compiler Construction (CS-636) Muhammad Bilal Bashir UIIT, Rawalpindi

Example – Attribute Grammars (Continue…) Here the number on LHS is different from number on

RHS because both has different value so we distinguish between them with the help of subscript number1 number2 digit

Now to represent 2 digit number e.g. 34 we need to multiply number2 with 10 hence the attribute equation of grammar number number digit rule will look like as follows;

number1 .val number2 .val * 10 + digit.val

18

Page 19: 1 Compiler Construction (CS-636) Muhammad Bilal Bashir UIIT, Rawalpindi

Example – Attribute Grammars (Continue…)

Grammar Rule Semantic Rule

number number digit number digit digit 0digit 1digit 2digit 3digit 4digit 5digit 6digit 7digit 8digit 9

umber1.val = number2.val * 10 + digit.val number.val = digit.val digit.val = 0digit.val = 1digit.val = 2digit.val = 3digit.val = 4digit.val = 5digit.val = 6digit.val = 7digit.val = 8digit.val = 9

19

Page 20: 1 Compiler Construction (CS-636) Muhammad Bilal Bashir UIIT, Rawalpindi

Exercise

Construct a parse tree with along with attribute equations to derive and generate value “289” by using following grammar:

number number digit | digit

digit 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

20

Page 21: 1 Compiler Construction (CS-636) Muhammad Bilal Bashir UIIT, Rawalpindi

Example 2 – Attribute Grammars Consider the following grammar for simple integer

arithmetic expressions:

exp exp + term | exp - term| term

term term * factor | factor

factor ( exp ) | number

21

Page 22: 1 Compiler Construction (CS-636) Muhammad Bilal Bashir UIIT, Rawalpindi

The Symbol Table

The symbol table is a major data structure in a compile after the syntax tree

In some languages symbol table is involved during the process of parsing and even lexical analysis where they need to add some information in it or may need to look for something from it

But in a careful designed language like Pascal or Ada, it is possible and reasonable to put off symbol table operations until after a complete parse, when the program being translated is known to be syntactically correct

22

Page 23: 1 Compiler Construction (CS-636) Muhammad Bilal Bashir UIIT, Rawalpindi

The Symbol Table (Continue…)

The principal symbol table operations include Insert is used to store the information provided by name

declarations Lookup is needed to retrieve the information associated to a

name Delete is needed to remove the information provided by

declaration when that declaration no longer applies Typically symbol table stores data type information,

information or region of applicability (scope) , and information on eventual location in memory

23

Page 24: 1 Compiler Construction (CS-636) Muhammad Bilal Bashir UIIT, Rawalpindi

24

Summary

Any Questions?