0% found this document useful (0 votes)
48 views22 pages

Lecture 09

Bottom-up parsing builds a parse tree from the leaves to the root by working backwards from the input string toward the start symbol. It uses shift-reduce parsing to either shift input symbols onto a stack or reduce substrings on the stack by replacing them with a non-terminal symbol according to a production rule. The parser determines whether to shift or reduce by referencing a parsing table constructed from the grammar's LR(0) items.

Uploaded by

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

Lecture 09

Bottom-up parsing builds a parse tree from the leaves to the root by working backwards from the input string toward the start symbol. It uses shift-reduce parsing to either shift input symbols onto a stack or reduce substrings on the stack by replacing them with a non-terminal symbol according to a production rule. The parser determines whether to shift or reduce by referencing a parsing table constructed from the grammar's LR(0) items.

Uploaded by

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

BOTTOM UP PARSING

Bottom-up parsing
 Goal of parser : build a derivation
 Top-down parser : build a derivation by working from
the start symbol towards the input.
 Builds parse tree from root to leaves
 Builds leftmost derivation
 Bottom-up parser : build a derivation by working from
the input back toward the start symbol
 Builds parse tree from leaves to root
 Builds reverse rightmost derivation
Bottom-up parsing
 The parser looks for a substring of the parse tree's
frontier...
 ...that matches the rhs of a production and
 ...whose reduction to the non-terminal on the lhs
represents on step along the reverse of a rightmost
derivation
 Such a substring is called a handle.
 Important:
 Not all substrings that match a rhs are handles.
Bottom-up parsing techniques
 Shift-reduce parsing
 Shift input symbols until a handle is found. Then,
reduce the substring to the non-terminal on the lhs of
the corresponding production.
 Operator-precedence parsing
 Based on shift-reduce parsing.
 Identifies handles based on precedence rules.
Example: Shift-reduce parsing
 Grammar:
1. S  S+S
2. S  S-S
3. S  (S)
4. S  a

Input to parse:
a1-(a2+a3)
Example: Shift-reduce parsing
 Grammar:
1. E  2E2
2. E  3E3
3. E  4

Input to parse:
32423
Example: Shift-reduce parsing
STACK ACTION
$ Shift
Grammar:
$ id1 Reduce (rule 5)
1. S  E
2. E  E+E $E Shift
3. E  E*E
$E+ Shift
4. E  num
5. E  id $ E + num Reduce (rule 4)
$E+E Shift
$E+E* Shift
$ E + E * id2 Reduce (rule 5)
Input to parse:
id1 + num * id2 $E+E*E Reduce (rule 3)
$E+E Reduce (rule 2)

Handles: $E Reduce (rule 1)


underlined $S Accept
Shift-Reduce parsing
 A shift-reduce parser has 4 actions:
 Shift -- next input symbol is shifted onto the stack
 Reduce -- handle is at top of stack
 pop handle
 push appropriate lhs
 Accept -- stop parsing & report success
 Error -- call error reporting/recovery routine
Shift-Reduce parsing
 How can we know when we have found a
handle?
 Analyze the grammar beforehand.
 Build tables
 Look ahead in the input
 LR(1) parsers recognize precisely those
languages in which one symbol of look-ahead is
enough to determine whether to reduce or shift.
 L : for left-to-right parse of the input
 R : for reverse rightmost derivation
 1: for one symbol of lookahead
How does it work?
 Read input, one token at a time
 Use stack to keep track of current state
 The state at the top of the stack summarizes the
information below.
 The stack contains information about what has been
parsed so far.
 Use parsing table to determine action based on
current state and look-ahead symbol.
 How do we build a parsing table?
LR parsing techniques
 SLR (not in the book)
 Simple LR parsing
 Easy to implement, not strong enough
 Uses LR(0) items
 Canonical LR
 Larger parser but powerful
 Uses LR(1) items
Bottom-up Parser Table
Construction
Overview
How to construct parsing table?
• Steps:
– Augment the given grammar.
– Draw Conical collection of LR(0) items.
– Number the production
– Create parsing table.
Example 1
• S ->AB
• A -> a
• B -> b

• Step 1: Create Augmented Grammar


– S’->S
– S ->AB
– A -> a
– B -> b
How to construct parsing
table?...
• Step 2: Call the closure
1
Accepted
S’->.S
S ->.AB S S’->S.
A ->.a
A
0
2 4
We haven't
considered S ->A.B B
B -> b S ->AB.
B because .
Is before A
a
3 5
b
A ->a. B -> b.
Parsing Table
Action Goto
a b $ S A B
0 S3 1 2
1 accepted
2 S5 4
3 r2 r2 r2

4 r1 r1 r1

5 r3 r3 r3

1. S ->AB
2. A -> a Step 3
3. B -> b
Example 2

Augmented Grammar:
Example 2: Solution
Example 2: Solution
Example 3

Grammar

Parsing Table
Example 3

Input: aabb$

Stack

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy