SlideShare a Scribd company logo
1 of 23
Top-Down and Bottom-Up Parsing
Top Down Parsing

Bottom Up Parsing
Top Down Parsing
Things to know:
Top down parsing is constructing a parse tree for the input starting from the root and
   create nodes of the parse tree in preorder(depth first).
A general form of top down parsing is the recursive descent parsing.
A recursive descent parsing is a top down parsing technique that execute a set of
   recursive procedures to process the input, that involves backtracking(means
   scanning the input repeatedly).
Backtracking is time consuming and therefore, inefficient. That‟s why a special case
   of top down parsing was developed, called predictive parsing, where no
   backtracking is required.
A dilemma can occur if there is a left recursive grammar. Even with backtracking, you
   can find the parser to go into an infinite loop.
There are two types of recursion, left recursive and right recursive, based on it‟s
   name, a left recursive grammar build trees that grows down to the left, while right
   recursive is vice versa.
Top-down Parse tree of Grammar G(Where input=id):
G= E -> T E‟
   E‟-> +T E‟ | ε                  E        E          E          E
   T-> F T‟
                                        T       E’ T       E’ T        E’
   T‟-> *F T‟ | ε
   F-> (E) | id                                 F      T’ F       T’

                                                        id

An example of a simple production with left recursive grammar
Consider the grammar: expr -> expr + term
This is an example of a left recursive grammar.
Whenever we call expr, the same procedure is called out, and the parser will loop forever.

By carefully writing a grammar, one can eliminate left recursion from it.
expr -> expr + term, can be written as

expr -> expr + term | term

After obtaining a grammar that needs no backtracking, we can use the
PREDICTIVE PARSER
Top Down Parsing Techniques



    Recursive-Descent Parsing

    Predictive Parsing
Recursive-Descent
Recursive-Descent Parsing               Parsing
  A recursive-descent parsing program consists of a set of procedures, one for each
      nonterminal. Execution begins with the procedure for the start symbol, which halts
      and announces success if its procedure body scans the entire input string.
  General recursive-descent may require backtracking; that is, it may require repeated
      scans over the input.
  Consider the grammar with input string “cad”:
  S -> c A d
  A -> a b | a

                       S                   S                     S

                   c   A   d           c   A    d           c    A   d

                                       a        b                a

  c   a   d



                                                                     Back
Predictive Parsing-a parsing technique that uses a lookahead symbol to
determine if the current input arguments matches the lookahead symbol.



                                           Construction of
              First and
                                             Predictive
               Follow
                                           Parsing Tables


              LL(1)
                                           Error Recovery
            Grammars
First and
      Follow

First and Follow aids the construction of a predictive parser.
They allow us to fill in the entries of a predictive parsing table.

 a is any string of terminals , then First(a) is the set of terminals
that begin the strings derived from a. If a is an empty string(ɛ),
then ɛ is also in First(a).

Follow (A), for a nonterminal A, to be the set of terminals a that
can appear immediately to the right of A in a sentential form.
First and
         Follow
Rules in computing FIRST (X) where X can be a terminal or nonterminal, or even ε(empty
    string).
1) If X is a terminal, then FIRST(X)= X.
2) If X is ε, then FIRST (X) = ε.
3) If X is a nonterminal and Y and Z are nonterminals, with a production of
     X -> Y
     Y -> Za
     Z-> b; then FIRST(X) = b; where FIRST(nonterminal1) -> FIRST(nonterminal2)or until
     you reach the first terminal of the production. In that case
(FIRST(nonterminaln) =FIRST(nonterminaln+1))

4) If X is a nonterminal and contains two productions. EX:
X -> a | b; then FIRST (X) = {a , b}
First and
       Follow

• Consider again grammar G:   ANSWERS(FIRST):
  1) E -> T E‟                1) FIRST(E) = FIRST(T) =
     E‟ -> +T E‟ | ε             FIRST(F) = { ( , id }
     T -> F T‟                   FIRST (E‟) = { + , ε }
     T„ -> *F T‟ | ε             FIRST (T) = { *, ε }
     F -> ( E ) | id
  2) S -> iEtSS‟ | a          2) FIRST(S)= { i , a }
     S‟ -> eS | ε                FIRST(S‟)= { e, ε }
     E -> b                      FIRST(E) = { b }
First and
           Follow
Rules in computing FOLLOW ( X) where X is a nonterminal
1) If X is a part of a production and is succeeded by a terminal, for example: A -> Xa; then
     Follow(X) = { a }
2) If X is the start symbol for a grammar, for ex:
     X -> AB
     A -> a
     B -> b; then add $ to FOLLOW (X); FOLLOW(X)= { $ }
3) If X is a part of a production and followed by another non terminal, get the FIRST of that
     succeeding nonterminal.
     ex: A -> XD
         D -> aB ; then FOLLOW(X)= FIRST(D) = { a }; and if FIRST(D) contains ε
(ex: D->aB | ε), then everything in FOLLOW(D) is in FOLLOW(X).
4) If X is the last symbol of a production, ex: S -> abX, then
     FOLLOW(X)= FOLLOW(S)
First and
               Follow

•   Consider again grammar G:                             ANSWERS FOR FOLLOW:
    1) E -> T E‟                                          1) FOLLOW(E) = FOLLOW(E‟)= { ) , $}
       E‟ -> +T E‟ | ε                                       FOLLOW (T)= FOLLOW(T‟)= { +, ), $}
       T -> F T‟                                             FOLLOW (F) = { +, * , ), $}
       T„ -> *F T‟ | ε
       F -> ( E ) | id
2) S -> iEtSS‟ | a                                        2)   FOLLOW (S) = FOLLOW (S‟)={ e, $}
       S‟ -> eS | ε                                            FOLLOW(E)= { t }
       E -> b
ANSWERS(FIRST):
1) FIRST(E) = FIRST(T) = FIRST(F) = { ( , id }
    FIRST (E‟) = { + , ε }
    FIRST (T‟) = { *, ε }

2) FIRST(S)= { i , a }; FIRST(S‟)= { e, ε }; FIRST(E) =
   {b}
ANSWERS(FOLLOW):
Construction of
  Predictive
Parsing Tables
The general idea is to use the FIRST AND FOLLOW to
  construct the parsing tables.
Each FIRST of every production is labeled in the table
  whenever the input matches with it.
When a FIRST of a production contains ε, then we get
  the Follow of the production
Consider again grammar G:
   Construction of                    E -> T E‟
                                      E‟ -> + T E‟ | ε
     Predictive                       T -> F T‟

   Parsing Tables                     T- -> *FT | ε
                                      F -> ( E ) | id
                                      and their First and Follow

FIRST(E) = FIRST(T) = FIRST(F) = { ( , id }        FOLLOW(E) = FOLLOW(E‟)= { ) , $}
FIRST (E‟) = { + , ε }                             FOLLOW (T)= FOLLOW(T‟)= { +, ), $}
FIRST (T‟) = { *, ε }                              FOLLOW (F) = { +, * , ), $}

Nontermi
  nals
                 Id           +               *          (           )          $

    E         E->TE‟                                  E->TE‟
    E‟                    E‟->+TE‟                                 E‟->ε      E‟->ε
    T         T->FT‟                                   T-FT‟
    T‟                      T‟-> ε      T‟->*FT‟                   T‟->ε      T‟->ε
    F          F-> id                                 F->(E)
Nontermin        Id      +                         (       )               $
    als                              *
     E       E->TE‟                             E->TE‟
     E‟                E‟->+TE‟                           E‟->ε            E‟->ε
     T       T->FT‟                             T->FT‟
     T‟                 T‟-> ε    T‟->*FT‟                T‟->ε            T‟->ε
     F       F-> id                             F->(E)
          STACK                    INPUT                        ACTION
$E                                       id + id * id $
$E‟T                                     id + id * id $         E->TE‟
$E‟T‟F                                   id + id * id $         T->FT‟
$E‟T‟id                                  id + id * id $         F-> id
$E‟T‟                                       + id * id $
$E‟                                         + id * id $          T‟-> ε
$E‟T +                                      + id * id $         E‟->+TE‟
$E‟T                                          id * id $
$E‟T‟F                                        id * id $         T->FT‟
$E‟T‟id                                       id * id $         F-> id
$E‟T‟                                            * id $
$E‟T‟F*                                          * id $         T‟->*FT‟
$E‟T‟F                                             id $
$E‟T‟id                                            id $          F-> id
$E‟T‟                                                 $
$E‟                                                   $         Back
                                                                 T‟->ε
$                                                     $          E‟->ε
LL(1)
       Grammars

• What does LL(1) mean?
The first “L” in LL(1) stands for scanning the input from left to right, the second “L”
   is for producing a leftmost derivation, and the “1” for using one input symbol of
   lookahead at each step to make parsing action decisions.
No ambiguous or left recursive grammar is LL(1).
LL(1)
      Grammars

There remains a question of what should be done when a parsing table has
   multiple-defined entries.
One solution is to transform the grammar by eliminating all left recursion and then
   left factoring when possible, but not all grammars can yield an LL(1) grammar
   at all.

The main difficulty in using a predictive parsing is in writing a grammar for the
   source language such that a predictive parser can be constructed from the
   grammar.
To alleviate some of the difficulty, one can use a operator precedence, or even
   better the LR parser, that provides both the benefits of predictive parsing and
   operator precedence automatically.
                                                                BACK
Error Recovery

When does an error possibly occur?
-An error is detected when the terminal on the top of the stack
  does not match the next input symbol or when the
  nonterminal A is on the top of the stack, a is the next input
  symbol, and the parsing table entry M[A, a] is empty.
How can we deal with errors?
Panic-mode error recovery is based on the idea of skipping
  symbols on the input until a token in a selected set of synch
  tokens appears.
Error Recovery

How does it work?
Using follow and first symbols as synchronizing tokens works
  well. The parsing table will be filled with “synch” tokens
  obtained from the FOLLOW set of the nonterminal.

When a parser looks up entry M[A,a] and finds it blank, then a
 is skipped. If the entry is “synch”, then the nonterminal is
 popped in an attempt to resume parsing.
Nontermin        Id        +                        (          )            $
    als                                *
     E          E->TE‟                           E->TE‟      synch         synch
     E‟                  E‟->+TE‟                            E‟->ε         E‟->ε
     T          T->FT‟    synch                  T->FT‟     synch          synch
     T‟                   T‟-> ε    T‟->*FT‟                T‟->ε          T‟->ε
     F       STACK id
                 F->      synch      synch
                                     INPUT       F->(E)         ACTIONsynch
                                                             synch
$E                                         ) id * + id $        Error, skip )
$E                                           id * + id $     Id is in FIRST(E)
$E‟ T                                        id * + id $
$E‟ T‟F                                      id * + id $
$E‟ T‟id                                     id * + id $
$E‟ T‟                                          * + id $
$E‟ T‟ F *                                      * + id $
$E‟ T‟ F                                          + id $   Error, M[F, +1 = synch
$E‟ T‟                                            + id $    F has been popped
$E‟                                               + id $
$E‟ T+                                            + id $
$E‟ T                                               id $
$E‟ T‟ F                                            id $
$E‟ T‟ id                                           id $
$E‟T‟                                                  $
$E‟                                                    $
$                                                      $
                                                                    Back
Error Recovery

• Another error recovery procedure is the Phrase-level
  Recovery. This is implemented by filling in the blank entries
  in the parsing table with pointers to error routines. These
  routines can also pop symbols from the stack, change,
  insert or delete symbols on the input, and issue
  appropriate error messages. The alteration of stack
  symbols is very questionable and risky.



                                                BACK
Bottom Up Parsing
A general style of bottom up parsing will be introduced, it is
  the shift-reduce parsing.
Shift reduce parsing works based on its name, “Shift” and
  “Reduce”, so whenever the stack holds symbols that
  cannot be reduced anymore, we shift another input, and
  when it matches, we reduce.
Bottom Up Parsing
    STACK            INPUT                 ACTION
1) $              id1 + id2 * id3 $   Shift
2) $id1               + id2 * id3 $   Reduce by E -
3) $E                 + id2 * id3 $   >id
4) $E +                 id2 * id3 $   Shift
5) $E + id2                 * id3 $   Shift
6) $E + E                   * id3 $   Reduce by E->id
7) $E + E *                   id3 $   Shift
8) $E + E * id3                   $   Shift
9) $E + E * E                     $   Reduce by E->id
10)$E + E                         $   Reduce by E-> E * E
11)$E                             $   Reduce by E-> E+ E
                                      ACCEPT

More Related Content

What's hot

What's hot (20)

Symbol table in compiler Design
Symbol table in compiler DesignSymbol table in compiler Design
Symbol table in compiler Design
 
Lexical analysis - Compiler Design
Lexical analysis - Compiler DesignLexical analysis - Compiler Design
Lexical analysis - Compiler Design
 
RECURSIVE DESCENT PARSING
RECURSIVE DESCENT PARSINGRECURSIVE DESCENT PARSING
RECURSIVE DESCENT PARSING
 
Lecture 14 run time environment
Lecture 14 run time environmentLecture 14 run time environment
Lecture 14 run time environment
 
Bottom up parser
Bottom up parserBottom up parser
Bottom up parser
 
Types of Parser
Types of ParserTypes of Parser
Types of Parser
 
Algorithms Lecture 7: Graph Algorithms
Algorithms Lecture 7: Graph AlgorithmsAlgorithms Lecture 7: Graph Algorithms
Algorithms Lecture 7: Graph Algorithms
 
Regular expression with DFA
Regular expression with DFARegular expression with DFA
Regular expression with DFA
 
COMPILER DESIGN- Syntax Directed Translation
COMPILER DESIGN- Syntax Directed TranslationCOMPILER DESIGN- Syntax Directed Translation
COMPILER DESIGN- Syntax Directed Translation
 
Parsing
ParsingParsing
Parsing
 
Bottom - Up Parsing
Bottom - Up ParsingBottom - Up Parsing
Bottom - Up Parsing
 
A Role of Lexical Analyzer
A Role of Lexical AnalyzerA Role of Lexical Analyzer
A Role of Lexical Analyzer
 
Compiler Design
Compiler DesignCompiler Design
Compiler Design
 
Algorithms Lecture 1: Introduction to Algorithms
Algorithms Lecture 1: Introduction to AlgorithmsAlgorithms Lecture 1: Introduction to Algorithms
Algorithms Lecture 1: Introduction to Algorithms
 
1.Role lexical Analyzer
1.Role lexical Analyzer1.Role lexical Analyzer
1.Role lexical Analyzer
 
Algorithms Lecture 6: Searching Algorithms
Algorithms Lecture 6: Searching AlgorithmsAlgorithms Lecture 6: Searching Algorithms
Algorithms Lecture 6: Searching Algorithms
 
Ll(1) Parser in Compilers
Ll(1) Parser in CompilersLl(1) Parser in Compilers
Ll(1) Parser in Compilers
 
Syntax analysis
Syntax analysisSyntax analysis
Syntax analysis
 
Operator precedence
Operator precedenceOperator precedence
Operator precedence
 
Shift reduce parser
Shift reduce parserShift reduce parser
Shift reduce parser
 

Similar to Top-Down and Bottom-Up Parsing Techniques

Top down and botttom up 2 LATEST.
Top down     and botttom up 2 LATEST.Top down     and botttom up 2 LATEST.
Top down and botttom up 2 LATEST.Gerwin Ocsena
 
Top down parsing(sid) (1)
Top down parsing(sid) (1)Top down parsing(sid) (1)
Top down parsing(sid) (1)Siddhesh Pange
 
CS17604_TOP Parser Compiler Design Techniques
CS17604_TOP Parser Compiler Design TechniquesCS17604_TOP Parser Compiler Design Techniques
CS17604_TOP Parser Compiler Design Techniquesd72994185
 
ALF 5 - Parser Top-Down (2018)
ALF 5 - Parser Top-Down (2018)ALF 5 - Parser Top-Down (2018)
ALF 5 - Parser Top-Down (2018)Alexandru Radovici
 
Compiler Construction | Lecture 4 | Parsing
Compiler Construction | Lecture 4 | Parsing Compiler Construction | Lecture 4 | Parsing
Compiler Construction | Lecture 4 | Parsing Eelco Visser
 
6-Practice Problems - LL(1) parser-16-05-2023.pptx
6-Practice Problems - LL(1) parser-16-05-2023.pptx6-Practice Problems - LL(1) parser-16-05-2023.pptx
6-Practice Problems - LL(1) parser-16-05-2023.pptxvenkatapranaykumarGa
 
Climbing the Abstract Syntax Tree (Forum PHP 2017)
Climbing the Abstract Syntax Tree (Forum PHP 2017)Climbing the Abstract Syntax Tree (Forum PHP 2017)
Climbing the Abstract Syntax Tree (Forum PHP 2017)James Titcumb
 
Climbing the Abstract Syntax Tree (Midwest PHP 2020)
Climbing the Abstract Syntax Tree (Midwest PHP 2020)Climbing the Abstract Syntax Tree (Midwest PHP 2020)
Climbing the Abstract Syntax Tree (Midwest PHP 2020)James Titcumb
 
Parsing in Compiler Design
Parsing in Compiler DesignParsing in Compiler Design
Parsing in Compiler DesignAkhil Kaushik
 
Climbing the Abstract Syntax Tree (PHP UK 2018)
Climbing the Abstract Syntax Tree (PHP UK 2018)Climbing the Abstract Syntax Tree (PHP UK 2018)
Climbing the Abstract Syntax Tree (PHP UK 2018)James Titcumb
 

Similar to Top-Down and Bottom-Up Parsing Techniques (20)

Top down and botttom up 2 LATEST.
Top down     and botttom up 2 LATEST.Top down     and botttom up 2 LATEST.
Top down and botttom up 2 LATEST.
 
Top down parsing(sid) (1)
Top down parsing(sid) (1)Top down parsing(sid) (1)
Top down parsing(sid) (1)
 
CS17604_TOP Parser Compiler Design Techniques
CS17604_TOP Parser Compiler Design TechniquesCS17604_TOP Parser Compiler Design Techniques
CS17604_TOP Parser Compiler Design Techniques
 
ALF 5 - Parser Top-Down (2018)
ALF 5 - Parser Top-Down (2018)ALF 5 - Parser Top-Down (2018)
ALF 5 - Parser Top-Down (2018)
 
ALF 5 - Parser Top-Down
ALF 5 - Parser Top-DownALF 5 - Parser Top-Down
ALF 5 - Parser Top-Down
 
LL(1) parsing
LL(1) parsingLL(1) parsing
LL(1) parsing
 
Compiler Construction | Lecture 4 | Parsing
Compiler Construction | Lecture 4 | Parsing Compiler Construction | Lecture 4 | Parsing
Compiler Construction | Lecture 4 | Parsing
 
11CS10033.pptx
11CS10033.pptx11CS10033.pptx
11CS10033.pptx
 
Ch5b
Ch5bCh5b
Ch5b
 
6-Practice Problems - LL(1) parser-16-05-2023.pptx
6-Practice Problems - LL(1) parser-16-05-2023.pptx6-Practice Problems - LL(1) parser-16-05-2023.pptx
6-Practice Problems - LL(1) parser-16-05-2023.pptx
 
LL(1) Parsers
LL(1) ParsersLL(1) Parsers
LL(1) Parsers
 
Left factor put
Left factor putLeft factor put
Left factor put
 
Assignment10
Assignment10Assignment10
Assignment10
 
First and follow set
First and follow setFirst and follow set
First and follow set
 
Climbing the Abstract Syntax Tree (Forum PHP 2017)
Climbing the Abstract Syntax Tree (Forum PHP 2017)Climbing the Abstract Syntax Tree (Forum PHP 2017)
Climbing the Abstract Syntax Tree (Forum PHP 2017)
 
Ch5b.ppt
Ch5b.pptCh5b.ppt
Ch5b.ppt
 
Climbing the Abstract Syntax Tree (Midwest PHP 2020)
Climbing the Abstract Syntax Tree (Midwest PHP 2020)Climbing the Abstract Syntax Tree (Midwest PHP 2020)
Climbing the Abstract Syntax Tree (Midwest PHP 2020)
 
Parsing in Compiler Design
Parsing in Compiler DesignParsing in Compiler Design
Parsing in Compiler Design
 
Climbing the Abstract Syntax Tree (PHP UK 2018)
Climbing the Abstract Syntax Tree (PHP UK 2018)Climbing the Abstract Syntax Tree (PHP UK 2018)
Climbing the Abstract Syntax Tree (PHP UK 2018)
 
Cs419 lec9 constructing parsing table ll1
Cs419 lec9   constructing parsing table ll1Cs419 lec9   constructing parsing table ll1
Cs419 lec9 constructing parsing table ll1
 

Recently uploaded

Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfPrecisely
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxBkGupta21
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 

Recently uploaded (20)

Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptx
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 

Top-Down and Bottom-Up Parsing Techniques

  • 3. Top Down Parsing Things to know: Top down parsing is constructing a parse tree for the input starting from the root and create nodes of the parse tree in preorder(depth first). A general form of top down parsing is the recursive descent parsing. A recursive descent parsing is a top down parsing technique that execute a set of recursive procedures to process the input, that involves backtracking(means scanning the input repeatedly). Backtracking is time consuming and therefore, inefficient. That‟s why a special case of top down parsing was developed, called predictive parsing, where no backtracking is required. A dilemma can occur if there is a left recursive grammar. Even with backtracking, you can find the parser to go into an infinite loop. There are two types of recursion, left recursive and right recursive, based on it‟s name, a left recursive grammar build trees that grows down to the left, while right recursive is vice versa.
  • 4. Top-down Parse tree of Grammar G(Where input=id): G= E -> T E‟ E‟-> +T E‟ | ε E E E E T-> F T‟ T E’ T E’ T E’ T‟-> *F T‟ | ε F-> (E) | id F T’ F T’ id An example of a simple production with left recursive grammar Consider the grammar: expr -> expr + term This is an example of a left recursive grammar. Whenever we call expr, the same procedure is called out, and the parser will loop forever. By carefully writing a grammar, one can eliminate left recursion from it. expr -> expr + term, can be written as expr -> expr + term | term After obtaining a grammar that needs no backtracking, we can use the PREDICTIVE PARSER
  • 5. Top Down Parsing Techniques Recursive-Descent Parsing Predictive Parsing
  • 6. Recursive-Descent Recursive-Descent Parsing Parsing A recursive-descent parsing program consists of a set of procedures, one for each nonterminal. Execution begins with the procedure for the start symbol, which halts and announces success if its procedure body scans the entire input string. General recursive-descent may require backtracking; that is, it may require repeated scans over the input. Consider the grammar with input string “cad”: S -> c A d A -> a b | a S S S c A d c A d c A d a b a c a d Back
  • 7. Predictive Parsing-a parsing technique that uses a lookahead symbol to determine if the current input arguments matches the lookahead symbol. Construction of First and Predictive Follow Parsing Tables LL(1) Error Recovery Grammars
  • 8. First and Follow First and Follow aids the construction of a predictive parser. They allow us to fill in the entries of a predictive parsing table. a is any string of terminals , then First(a) is the set of terminals that begin the strings derived from a. If a is an empty string(ɛ), then ɛ is also in First(a). Follow (A), for a nonterminal A, to be the set of terminals a that can appear immediately to the right of A in a sentential form.
  • 9. First and Follow Rules in computing FIRST (X) where X can be a terminal or nonterminal, or even ε(empty string). 1) If X is a terminal, then FIRST(X)= X. 2) If X is ε, then FIRST (X) = ε. 3) If X is a nonterminal and Y and Z are nonterminals, with a production of X -> Y Y -> Za Z-> b; then FIRST(X) = b; where FIRST(nonterminal1) -> FIRST(nonterminal2)or until you reach the first terminal of the production. In that case (FIRST(nonterminaln) =FIRST(nonterminaln+1)) 4) If X is a nonterminal and contains two productions. EX: X -> a | b; then FIRST (X) = {a , b}
  • 10. First and Follow • Consider again grammar G: ANSWERS(FIRST): 1) E -> T E‟ 1) FIRST(E) = FIRST(T) = E‟ -> +T E‟ | ε FIRST(F) = { ( , id } T -> F T‟ FIRST (E‟) = { + , ε } T„ -> *F T‟ | ε FIRST (T) = { *, ε } F -> ( E ) | id 2) S -> iEtSS‟ | a 2) FIRST(S)= { i , a } S‟ -> eS | ε FIRST(S‟)= { e, ε } E -> b FIRST(E) = { b }
  • 11. First and Follow Rules in computing FOLLOW ( X) where X is a nonterminal 1) If X is a part of a production and is succeeded by a terminal, for example: A -> Xa; then Follow(X) = { a } 2) If X is the start symbol for a grammar, for ex: X -> AB A -> a B -> b; then add $ to FOLLOW (X); FOLLOW(X)= { $ } 3) If X is a part of a production and followed by another non terminal, get the FIRST of that succeeding nonterminal. ex: A -> XD D -> aB ; then FOLLOW(X)= FIRST(D) = { a }; and if FIRST(D) contains ε (ex: D->aB | ε), then everything in FOLLOW(D) is in FOLLOW(X). 4) If X is the last symbol of a production, ex: S -> abX, then FOLLOW(X)= FOLLOW(S)
  • 12. First and Follow • Consider again grammar G: ANSWERS FOR FOLLOW: 1) E -> T E‟ 1) FOLLOW(E) = FOLLOW(E‟)= { ) , $} E‟ -> +T E‟ | ε FOLLOW (T)= FOLLOW(T‟)= { +, ), $} T -> F T‟ FOLLOW (F) = { +, * , ), $} T„ -> *F T‟ | ε F -> ( E ) | id 2) S -> iEtSS‟ | a 2) FOLLOW (S) = FOLLOW (S‟)={ e, $} S‟ -> eS | ε FOLLOW(E)= { t } E -> b ANSWERS(FIRST): 1) FIRST(E) = FIRST(T) = FIRST(F) = { ( , id } FIRST (E‟) = { + , ε } FIRST (T‟) = { *, ε } 2) FIRST(S)= { i , a }; FIRST(S‟)= { e, ε }; FIRST(E) = {b} ANSWERS(FOLLOW):
  • 13. Construction of Predictive Parsing Tables The general idea is to use the FIRST AND FOLLOW to construct the parsing tables. Each FIRST of every production is labeled in the table whenever the input matches with it. When a FIRST of a production contains ε, then we get the Follow of the production
  • 14. Consider again grammar G: Construction of E -> T E‟ E‟ -> + T E‟ | ε Predictive T -> F T‟ Parsing Tables T- -> *FT | ε F -> ( E ) | id and their First and Follow FIRST(E) = FIRST(T) = FIRST(F) = { ( , id } FOLLOW(E) = FOLLOW(E‟)= { ) , $} FIRST (E‟) = { + , ε } FOLLOW (T)= FOLLOW(T‟)= { +, ), $} FIRST (T‟) = { *, ε } FOLLOW (F) = { +, * , ), $} Nontermi nals Id + * ( ) $ E E->TE‟ E->TE‟ E‟ E‟->+TE‟ E‟->ε E‟->ε T T->FT‟ T-FT‟ T‟ T‟-> ε T‟->*FT‟ T‟->ε T‟->ε F F-> id F->(E)
  • 15. Nontermin Id + ( ) $ als * E E->TE‟ E->TE‟ E‟ E‟->+TE‟ E‟->ε E‟->ε T T->FT‟ T->FT‟ T‟ T‟-> ε T‟->*FT‟ T‟->ε T‟->ε F F-> id F->(E) STACK INPUT ACTION $E id + id * id $ $E‟T id + id * id $ E->TE‟ $E‟T‟F id + id * id $ T->FT‟ $E‟T‟id id + id * id $ F-> id $E‟T‟ + id * id $ $E‟ + id * id $ T‟-> ε $E‟T + + id * id $ E‟->+TE‟ $E‟T id * id $ $E‟T‟F id * id $ T->FT‟ $E‟T‟id id * id $ F-> id $E‟T‟ * id $ $E‟T‟F* * id $ T‟->*FT‟ $E‟T‟F id $ $E‟T‟id id $ F-> id $E‟T‟ $ $E‟ $ Back T‟->ε $ $ E‟->ε
  • 16. LL(1) Grammars • What does LL(1) mean? The first “L” in LL(1) stands for scanning the input from left to right, the second “L” is for producing a leftmost derivation, and the “1” for using one input symbol of lookahead at each step to make parsing action decisions. No ambiguous or left recursive grammar is LL(1).
  • 17. LL(1) Grammars There remains a question of what should be done when a parsing table has multiple-defined entries. One solution is to transform the grammar by eliminating all left recursion and then left factoring when possible, but not all grammars can yield an LL(1) grammar at all. The main difficulty in using a predictive parsing is in writing a grammar for the source language such that a predictive parser can be constructed from the grammar. To alleviate some of the difficulty, one can use a operator precedence, or even better the LR parser, that provides both the benefits of predictive parsing and operator precedence automatically. BACK
  • 18. Error Recovery When does an error possibly occur? -An error is detected when the terminal on the top of the stack does not match the next input symbol or when the nonterminal A is on the top of the stack, a is the next input symbol, and the parsing table entry M[A, a] is empty. How can we deal with errors? Panic-mode error recovery is based on the idea of skipping symbols on the input until a token in a selected set of synch tokens appears.
  • 19. Error Recovery How does it work? Using follow and first symbols as synchronizing tokens works well. The parsing table will be filled with “synch” tokens obtained from the FOLLOW set of the nonterminal. When a parser looks up entry M[A,a] and finds it blank, then a is skipped. If the entry is “synch”, then the nonterminal is popped in an attempt to resume parsing.
  • 20. Nontermin Id + ( ) $ als * E E->TE‟ E->TE‟ synch synch E‟ E‟->+TE‟ E‟->ε E‟->ε T T->FT‟ synch T->FT‟ synch synch T‟ T‟-> ε T‟->*FT‟ T‟->ε T‟->ε F STACK id F-> synch synch INPUT F->(E) ACTIONsynch synch $E ) id * + id $ Error, skip ) $E id * + id $ Id is in FIRST(E) $E‟ T id * + id $ $E‟ T‟F id * + id $ $E‟ T‟id id * + id $ $E‟ T‟ * + id $ $E‟ T‟ F * * + id $ $E‟ T‟ F + id $ Error, M[F, +1 = synch $E‟ T‟ + id $ F has been popped $E‟ + id $ $E‟ T+ + id $ $E‟ T id $ $E‟ T‟ F id $ $E‟ T‟ id id $ $E‟T‟ $ $E‟ $ $ $ Back
  • 21. Error Recovery • Another error recovery procedure is the Phrase-level Recovery. This is implemented by filling in the blank entries in the parsing table with pointers to error routines. These routines can also pop symbols from the stack, change, insert or delete symbols on the input, and issue appropriate error messages. The alteration of stack symbols is very questionable and risky. BACK
  • 22. Bottom Up Parsing A general style of bottom up parsing will be introduced, it is the shift-reduce parsing. Shift reduce parsing works based on its name, “Shift” and “Reduce”, so whenever the stack holds symbols that cannot be reduced anymore, we shift another input, and when it matches, we reduce.
  • 23. Bottom Up Parsing STACK INPUT ACTION 1) $ id1 + id2 * id3 $ Shift 2) $id1 + id2 * id3 $ Reduce by E - 3) $E + id2 * id3 $ >id 4) $E + id2 * id3 $ Shift 5) $E + id2 * id3 $ Shift 6) $E + E * id3 $ Reduce by E->id 7) $E + E * id3 $ Shift 8) $E + E * id3 $ Shift 9) $E + E * E $ Reduce by E->id 10)$E + E $ Reduce by E-> E * E 11)$E $ Reduce by E-> E+ E ACCEPT

Editor's Notes

  1. Top Down Parsing