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
Semantic Analysis Lecture:
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.: 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 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 a 1,…,a k, the principle of syntax-directed semantics implies that for each grammar rule X 0 → X 1 X 2 … X n, values of attributes X i a j of each grammar symbol X i are related to the values of attributes of other symbols in the rule 12
Attribute Grammars (Continue…) Should the same symbol X i 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: X i a j = f ij (X 0 a 1,…,X 0 a k.X 1 a 1,…,X 1 a k,…,X n a 1,…,X n a k ) An attribute grammar for the attributes a 1,…,a k 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 f ij 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 RuleSemantic Rules Rule 1. Rule n 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 number 1 number 2 digit Now to represent 2 digit number e.g. 34 we need to multiply number 2 with 10 hence the attribute equation of grammar number number digit rule will look like as follows; number 1.val number 2.val * 10 + digit.val 18
Example – Attribute Grammars (Continue…) Grammar RuleSemantic Rule number number digit number digit digit 0 digit 1 digit 2 digit 3 digit 4 digit 5 digit 6 digit 7 digit 8 digit 9 umber 1.val = number 2.val * 10 + digit.val number.val = digit.val digit.val = 0 digit.val = 1 digit.val = 2 digit.val = 3 digit.val = 4 digit.val = 5 digit.val = 6 digit.val = 7 digit.val = 8 digit.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?