Professional Documents
Culture Documents
4 Compiler - Slide
4 Compiler - Slide
𝑆𝑡𝑎𝑟𝑡 → 𝐸𝑥𝑝𝑟
𝐸𝑥𝑝𝑟 → 𝐸𝑥𝑝𝑟 + 𝑇𝑒𝑟𝑚 𝐸𝑥𝑝𝑟 − 𝑇𝑒𝑟𝑚 𝑇𝑒𝑟𝑚
priority
CS 335: Top-down Parsing 𝑇𝑒𝑟𝑚 → 𝑇𝑒𝑟𝑚 × 𝐹𝑎𝑐𝑡𝑜𝑟 𝑇𝑒𝑟𝑚 ÷ 𝐹𝑎𝑐𝑡𝑜𝑟 𝐹𝑎𝑐𝑡𝑜𝑟
𝐹𝑎𝑐𝑡𝑜𝑟 → 𝐸𝑥𝑝𝑟 | num | name
Swarnendu Biswas
Semester 2022-2023-II
CSE, IIT Kanpur
Content influenced by many excellent references, see References slide for acknowledgements.
Term Term 𝑇𝑒𝑟𝑚 × 𝐹𝑎𝑐𝑡𝑜𝑟 Term 𝑇𝑒𝑟𝑚 × 𝐹𝑎𝑐𝑡𝑜𝑟 Term 𝑇𝑒𝑟𝑚 × 𝐹𝑎𝑐𝑡𝑜𝑟
𝑇𝑒𝑟𝑚 Term Term
𝐹𝑎𝑐𝑡𝑜𝑟 𝐹𝑎𝑐𝑡𝑜𝑟 𝐹𝑎𝑐𝑡𝑜𝑟 𝐹𝑎𝑐𝑡𝑜𝑟 𝐹𝑎𝑐𝑡𝑜𝑟 𝐹𝑎𝑐𝑡𝑜𝑟
𝐹𝑎𝑐𝑡𝑜𝑟 𝐹𝑎𝑐𝑡𝑜𝑟
name name name name name
name
continued from
previous slide
𝐸𝑥𝑝𝑟 + 𝑇𝑒𝑟𝑚 𝐸𝑥𝑝𝑟 + 𝑇𝑒𝑟𝑚 Grow the tree downwards by expanding productions at the lower levels of the
tree
Term 𝑇𝑒𝑟𝑚 × 𝐹𝑎𝑐𝑡𝑜𝑟 Term 𝑇𝑒𝑟𝑚 × 𝐹𝑎𝑐𝑡𝑜𝑟
• Select a nonterminal and extend it by adding children corresponding to the right side of some
production for the nonterminal
𝐹𝑎𝑐𝑡𝑜𝑟 𝐹𝑎𝑐𝑡𝑜𝑟 𝐹𝑎𝑐𝑡𝑜𝑟 𝐹𝑎𝑐𝑡𝑜𝑟 name
1 𝐸𝑥𝑝𝑟 → 𝐸𝑥𝑝𝑟 + 𝑇𝑒𝑟𝑚 1 𝐸𝑥𝑝𝑟 + 𝑇𝑒𝑟𝑚 ↑ name + name × name 1 𝐸𝑥𝑝𝑟 → 𝐸𝑥𝑝𝑟 + 𝑇𝑒𝑟𝑚 1 𝐸𝑥𝑝𝑟 + 𝑇𝑒𝑟𝑚 ↑ name + name × name
2 𝐸𝑥𝑝𝑟 → 𝐸𝑥𝑝𝑟 − 𝑇𝑒𝑟𝑚 3 𝑇𝑒𝑟𝑚 + 𝑇𝑒𝑟𝑚 ↑ name + name × name 2 𝐸𝑥𝑝𝑟 → 𝐸𝑥𝑝𝑟 − 𝑇𝑒𝑟𝑚 3 𝑇𝑒𝑟𝑚 + 𝑇𝑒𝑟𝑚 ↑ name + name × name
3 𝐸𝑥𝑝𝑟 → 𝑇𝑒𝑟𝑚 6 𝐹𝑎𝑐𝑡𝑜𝑟 + 𝑇𝑒𝑟𝑚 ↑ name + name × name 3 𝐸𝑥𝑝𝑟 → 𝑇𝑒𝑟𝑚 6 𝐹𝑎𝑐𝑡𝑜𝑟 + 𝑇𝑒𝑟𝑚 ↑ name + name × name
4 𝑇𝑒𝑟𝑚 → 𝑇𝑒𝑟𝑚 × 𝐹𝑎𝑐𝑡𝑜𝑟 9 name + 𝑇𝑒𝑟𝑚 ↑ name + name × name 4 𝑇𝑒𝑟𝑚 → 𝑇𝑒𝑟𝑚 × 𝐹𝑎𝑐𝑡𝑜𝑟 9 name + 𝑇𝑒𝑟𝑚 ↑ name + name × name
name + 𝑇𝑒𝑟𝑚 name ↑ +name × name name + 𝑇𝑒𝑟𝑚 name ↑ +name × name
5 𝑇𝑒𝑟𝑚 → 𝑇𝑒𝑟𝑚 ÷ 𝐹𝑎𝑐𝑡𝑜𝑟 5 𝑇𝑒𝑟𝑚 → 𝑇𝑒𝑟𝑚 ÷ 𝐹𝑎𝑐𝑡𝑜𝑟
name + 𝑇𝑒𝑟𝑚 name +↑ name × name name + 𝑇𝑒𝑟𝑚 name +↑ name × name
6 𝑇𝑒𝑟𝑚 → 𝐹𝑎𝑐𝑡𝑜𝑟 6 𝑇𝑒𝑟𝑚 → 𝐹𝑎𝑐𝑡𝑜𝑟
4 name + 𝑇𝑒𝑟𝑚 × 𝐹𝑎𝑐𝑡𝑜𝑟 name +↑ name × name How does a top-down parser
4 choose
name + which rule toname
𝑇𝑒𝑟𝑚 × 𝐹𝑎𝑐𝑡𝑜𝑟 apply?
+↑ name × name
7 𝐹𝑎𝑐𝑡𝑜𝑟 → (𝐸𝑥𝑝𝑟) 7 𝐹𝑎𝑐𝑡𝑜𝑟 → (𝐸𝑥𝑝𝑟)
6 name + 𝐹𝑎𝑐𝑡𝑜𝑟 × 𝐹𝑎𝑐𝑡𝑜𝑟 name +↑ name × name 6 name + 𝐹𝑎𝑐𝑡𝑜𝑟 × 𝐹𝑎𝑐𝑡𝑜𝑟 name +↑ name × name
8 𝐹𝑎𝑐𝑡𝑜𝑟 → num 8 𝐹𝑎𝑐𝑡𝑜𝑟 → num
9 name + name × 𝐹𝑎𝑐𝑡𝑜𝑟 name +↑ name × name 9 name + name × 𝐹𝑎𝑐𝑡𝑜𝑟 name +↑ name × name
9 𝐹𝑎𝑐𝑡𝑜𝑟 → name 9 𝐹𝑎𝑐𝑡𝑜𝑟 → name
name + name × 𝐹𝑎𝑐𝑡𝑜𝑟 name + name ↑× name name + name × 𝐹𝑎𝑐𝑡𝑜𝑟 name + name ↑× name
name + name × 𝐹𝑎𝑐𝑡𝑜𝑟 name + name ×↑ name name + name × 𝐹𝑎𝑐𝑡𝑜𝑟 name + name ×↑ name
9 name + name × name name + name ×↑ name 9 name + name × name name + name ×↑ name
name + name × name name + name × name ↑ name + name × name name + name × name ↑
CS 335 Swarnendu Biswas CS 335 Swarnendu Biswas
Selecting a Production
Left Recursion
Rule # Production Rule # Sentential Form Input
0 𝑆𝑡𝑎𝑟𝑡 → 𝐸𝑥𝑝𝑟 𝐸𝑥𝑝𝑟 ↑ name + name × name
• A grammar is left-recursive if it has a nonterminal 𝐴 such that there is
1 𝐸𝑥𝑝𝑟 → 𝐸𝑥𝑝𝑟 + 𝑇𝑒𝑟𝑚 1 𝐸𝑥𝑝𝑟 + 𝑇𝑒𝑟𝑚 ↑ name + name × name +
2 𝐸𝑥𝑝𝑟 → 𝐸𝑥𝑝𝑟 − 𝑇𝑒𝑟𝑚 1 𝐸𝑥𝑝𝑟 + 𝑇𝑒𝑟𝑚 + 𝑇𝑒𝑟𝑚 ↑ name + name × name a derivation 𝐴 ֜ 𝐴𝛼 for some string 𝛼
3 𝐸𝑥𝑝𝑟 → 𝑇𝑒𝑟𝑚 1 𝐸𝑥𝑝𝑟 + 𝑇𝑒𝑟𝑚 + 𝑇𝑒𝑟𝑚 + ⋯ ↑ name + name × name • Direct left recursion: There is a production of the form 𝐴 → 𝐴𝛼
4 𝑇𝑒𝑟𝑚 → 𝑇𝑒𝑟𝑚 × 𝐹𝑎𝑐𝑡𝑜𝑟 1 … ↑ name + name × name • Indirect left recursion: First symbol on the right-hand side of a rule can derive
5 𝑇𝑒𝑟𝑚 → 𝑇𝑒𝑟𝑚 ÷ 𝐹𝑎𝑐𝑡𝑜𝑟 1 … ↑ name + name × name the symbol on the left
6 𝑇𝑒𝑟𝑚 → 𝐹𝑎𝑐𝑡𝑜𝑟
7 𝐹𝑎𝑐𝑡𝑜𝑟 → (𝐸𝑥𝑝𝑟) We can often reformulate a grammar to
A𝐹𝑎𝑐𝑡𝑜𝑟
top-down parser can loop indefinitely with left-recursive
8 → num avoid left recursion
9 grammar
𝐹𝑎𝑐𝑡𝑜𝑟 → name
𝐴 → 𝛼𝐵|𝛾1 𝛾2 … |𝛾𝑗
𝐵 → 𝛽1 𝛽2 … |𝛽𝑛
Recursive-Descent Parsing
• Recursive-descent parsing is a form of top-down parsing that may
require backtracking
• Consists of a set of procedures, one for each nonterminal
void A() {
Choose an A-production 𝐴 → 𝑋1 𝑋2 … 𝑋𝑘
• First L stands for left-to-right scan, second L stands for leftmost derivation
• There is one lookahead token
• In LL(k), k stands for k lookahead tokens Predictive
Stack X Output
• Predictive parsers accept LL(k) grammars Parsing Program
• Every LL(1) grammar is a LL(2) grammar Y
$ Parsing Table 𝑀
What do we do when
we see an else?
References
• A. Aho et al. Compilers: Principles, Techniques, and Tools, 2nd edition, Chapter 4.4.
• K. Cooper and L. Torczon. Engineering a Compiler, 2nd edition, Chapter 3.3.