1 compiler construction (cs-636) muhammad bilal bashir uiit, rawalpindi

Post on 14-Dec-2015

226 Views

Category:

Documents

4 Downloads

Preview:

Click to see full reader

TRANSCRIPT

1

Compiler Construction (CS-636)

Muhammad Bilal BashirUIIT, Rawalpindi

Outline

1. Semantic Analysis

2. Attributes

3. Attribute Grammars

4. The Symbol Table

5. Summary

2

Semantic Analysis

Lecture: 13-14

3

Practical Work

Write pseudo code for Recursive Descent parsing algorithm

A A ( A ) | a

4

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

Semantic Analysis

6

Source code

Lexical Analysis

Syntactic Analysis

Semantic Analysis

Intermediate Code Gen

lexical errors

syntax errors

semantic errors

tokens

AST

AST’

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

24

Summary

Any Questions?

top related