Upload
bertha-baldwin
View
223
Download
4
Tags:
Embed Size (px)
Citation preview
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?