0% found this document useful (0 votes)
34 views17 pages

Compiler Lecture 4

The document summarizes a lecture on context-free grammars and their use in compiler design. It defines context-free grammars and their components. It provides examples of derivations from grammars and discusses how ambiguity can occur. It also covers associativity and precedence of operators. The objective is for students to understand context-free grammars, derivations, ambiguity, and operator properties. References for further reading on compiler design principles are also listed.

Uploaded by

ShahRiaz Polok
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
34 views17 pages

Compiler Lecture 4

The document summarizes a lecture on context-free grammars and their use in compiler design. It defines context-free grammars and their components. It provides examples of derivations from grammars and discusses how ambiguity can occur. It also covers associativity and precedence of operators. The objective is for students to understand context-free grammars, derivations, ambiguity, and operator properties. References for further reading on compiler design principles are also listed.

Uploaded by

ShahRiaz Polok
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 17

A Simple Syntax-Directed Translator

Course Code: CSC3220 Course Title: Compiler Design

Dept. of Computer Science


Faculty of Science and Technology

Lecturer No: 4 Week No: 4 Semester: Summer


Lecturer: Md Masum Billah; [email protected]; masum-billah.net
Lecture Outline
1. Quiz1
2. Learning Objectives
3. Context-free grammar​
4. Derivation
5. Ambiguity
6. Associativity of operators
7. Precedence of operators
8. Books and References
Objective and Outcome

Objective:
• To explain the Context Free Grammar (CFG) with example.
• To demonstrate derivation or derivation tree from a CFG
• To elaborate ambiguity and ambiguous grammar.
• To explain associativity and precedence of operator

Outcome:
• After this lecture the student will able to demonstrate CFG
• Student will be capable of derivation from CFG
• Student will be able to differentiate if a grammar is ambiguous or not.
• After this lecture student will learn associativity and precedence of operator
Context-free grammar

• In this section, we introduce a notation — the "context-free grammar," or


"grammar" for short — that is used to specify the syntax of a language.
• A grammar naturally describes the hierarchical structure of most
programming language constructs.
• For example, an if-else statement in Java can have the form
if ( expression ) statement else statement
Definition

A grammar consists of:


• a set of variables (also called non terminals), one of which is designated the start
variable; It is customary to use upper-case letters for variables;
• a set of terminals (from the alphabet); and
• a list of productions (also called rules).
• A designation of one of the non terminals as the start symbol.
Formal Definition

One can provide a formal definition of a context free grammar. It is a 4-tuple (V, Σ, S, P)
where:
• V is a finite set of variables;
• Σ is a finite alphabet of terminals;
• S is the start variable; and
• P is the finite set of productions. Each production has the form V → (V ∪ Σ) ∗

Example: 0ⁿ1ⁿ Here is a grammar:


S → 0S1
S→ε
S is the only variable. The terminals are 0 and 1. There are two productions.
Derivation

• A grammar derives strings by beginning with the start symbol and repeatedly
replacing a nonterminal by the body of a production for that nonterminal.
• The terminal strings that can be derived from the start symbol form the language
defined by the grammar.
Derivation
S → 0S1
S→ε

The string 0011 is in the language generated.

The derivation is:


S =⇒ 0S1 =⇒ 00S11 =⇒ 0011
For compactness, we write
S → 0S1 | ε
where the vertical bar means or.

Consider the CFG


S → 0S1S | 1S0S | ε
The string 011100 is generated:
S =⇒ 0S1S =⇒ 01S =⇒ 011S0S =⇒ 0111S0S0S
=⇒ 01110S0S =⇒ 011100S =⇒ 011100
Derivation
• This CFG generates sentences as composed of noun- and verb-phrases:

S → NP VP
NP → the N
VP → V NP
V → sings | eats
N → cat | song | canary

This generates “the canary sings the song”, but also “the song eats the cat”.
This CFG generates all “legal” sentences, not just meaningful ones.
Parse Trees and Ambiguity

• A parse tree pictorially shows how the start symbol of a grammar derives a
string in the language. If nonterminal A has a production A -> XYZ, then a
parse tree may have an interior node labeled A with three children labeled X,
Y, and Z, from left to right.

• A grammar can have more than one parse tree generating a given string
of terminals. Such a grammar is said to be ambiguous.
Derivation
string ->string + string | string - string | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
Check if the given grammar G is ambiguous or not.

S → aSb | SS
S→ε

For the string "aabb" the above grammar can generate two parse trees

Since there are two parse trees for a single string "aabb", the grammar G is ambiguous.
Associativity of operators​
left-associative

• By convention, 9+5+2 is equivalent to (9+5)+2 and 9 - 5 - 2 is equivalent to ( 9 - 5 ) - 2 .


• When an operand like 5 has operators to its left and right, conventions are needed for
deciding which operator applies to that operand.
• We say that the operator + associates to the left, because an operand with plus signs
on both sides of it belongs to the operator to its left. In most programming languages
the four arithmetic operators, addition, subtraction, multiplication, and division are
left-associative.
Right-associative
• Some common operators such as exponentiation are right-associative.
• As another example, the assignment operator = in C and its descendants is right
associative; that is, the expression a=b=c is treated in the same way as the expression
a=(b=c).
• Strings like a=b=c with a right-associative operator are generated by the following
grammar:
list list -digit|letter|digit
digit 0|1|2|……9|0
right ->• letter = right | letter
letter -> a | b | • • • | z
Precedence of operators

• Consider the expression 9+5*2.


• There are two possible interpretations of this expression: (9+5)*2 or 9+(5*2).
• The associativity rules for + and * apply to occurrences of the same operator, so
they do not resolve this ambiguity.
• We say that * has higher precedence than + if * takes its operands before + does.
• In ordinary arithmetic, multiplication and division have higher precedence than
addition and subtraction. Therefore, 5 is taken by * in 9+5*2.
Lecture References

1. Compilers-Principles, techniques and tools (2nd Edition) V. Aho, Sethi and D. Ullman
References/ Books

1. Compilers-Principles, techniques and tools (2nd Edition) V. Aho, Sethi and D.


Ullman
2. Principles of Compiler Design (2nd Revised Edition 2009) A. A. Puntambekar
3. Basics of Compiler Design Torben Mogensen

You might also like