+ All Categories
Home > Documents > 041 Bottom Up Parsing

041 Bottom Up Parsing

Date post: 04-Apr-2018
Category:
Upload: abckits
View: 220 times
Download: 0 times
Share this document with a friend

of 140

Transcript
  • 7/30/2019 041 Bottom Up Parsing

    1/140

    Bottom-UpParsing

  • 7/30/2019 041 Bottom Up Parsing

    2/140

    What is Bottom-Up Parsing?

    Idea: Apply productions in reverse to convertthe user's program to the start symbol.

    As with top-down, could be done with a DFS or

    BFS, though this is rarely done in practice. We'll be exploring fourdirectional, predictive

    bottom-up parsing techniques:

    Directional: Scan the input from left-to-right. Predictive: Guess which production should be

    inverted.

  • 7/30/2019 041 Bottom Up Parsing

    3/140

    Bottoms Up!

  • 7/30/2019 041 Bottom Up Parsing

    4/140

    One View of a Bottom-Up Parse

    S E$E TE E + TT int

    T (E)

    int + ( int + int + int ) $

  • 7/30/2019 041 Bottom Up Parsing

    5/140

    One View of a Bottom-Up Parse

    S E$E TE E + TT int

    T (E)

    int + ( int + int + int ) $

    T

  • 7/30/2019 041 Bottom Up Parsing

    6/140

    One View of a Bottom-Up Parse

    S E$E TE E + TT int

    T (E)

    int + ( int + int + int ) $

    T

    E

  • 7/30/2019 041 Bottom Up Parsing

    7/140

    One View of a Bottom-Up Parse

    S E$E TE E + TT int

    T (E)

    int + ( int + int + int ) $

    T

    E

    T

  • 7/30/2019 041 Bottom Up Parsing

    8/140

  • 7/30/2019 041 Bottom Up Parsing

    9/140

    One View of a Bottom-Up Parse

    S E$E TE E + TT int

    T (E)

    int + ( int + int + int ) $

    T

    E

    T

    E

    T

  • 7/30/2019 041 Bottom Up Parsing

    10/140

    One View of a Bottom-Up Parse

    S E$E TE E + TT int

    T (E)

    int + ( int + int + int ) $

    T

    E

    T

    E

    T

    E

  • 7/30/2019 041 Bottom Up Parsing

    11/140

    One View of a Bottom-Up Parse

    S E$E TE E + TT int

    T (E)

    int + ( int + int + int ) $

    T

    E

    T

    E

    T

    E

    T

  • 7/30/2019 041 Bottom Up Parsing

    12/140

    One View of a Bottom-Up Parse

    S E$E TE E + TT int

    T (E)

    int + ( int + int + int ) $

    T

    E

    T

    E

    T

    E

    T

    E

  • 7/30/2019 041 Bottom Up Parsing

    13/140

    One View of a Bottom-Up Parse

    S E$E TE E + TT int

    T (E)

    int + ( int + int + int ) $

    T

    E

    T

    E

    T

    E

    T

    E

    T

  • 7/30/2019 041 Bottom Up Parsing

    14/140

    One View of a Bottom-Up Parse

    S E$E TE E + TT int

    T (E)

    int + ( int + int + int ) $

    T

    E

    T

    E

    T

    E

    T

    E

    T

    E

  • 7/30/2019 041 Bottom Up Parsing

    15/140

    One View of a Bottom-Up Parse

    S E$E TE E + TT int

    T (E)

    int + ( int + int + int ) $

    T

    E

    T

    E

    T

    E

    T

    E

    T

    E

    S

  • 7/30/2019 041 Bottom Up Parsing

    16/140

    A Second View of a Bottom-Up Parse

    S E$E TE E + TT int

    T (E)

    int + ( int + int + int ) $

  • 7/30/2019 041 Bottom Up Parsing

    17/140

    A Second View of a Bottom-Up Parse

    S E$E TE E + TT int

    T (E)

    int + ( int + int + int ) $+ ( int + int + int ) $T

  • 7/30/2019 041 Bottom Up Parsing

    18/140

    A Second View of a Bottom-Up Parse

    S E$E TE E + TT int

    T (E)

    int + ( int + int + int ) $+ ( int + int + int ) $T+ ( int + int + int ) $E

  • 7/30/2019 041 Bottom Up Parsing

    19/140

    A Second View of a Bottom-Up Parse

    S E$E TE E + TT int

    T (E)

    int + ( int + int + int ) $+ ( int + int + int ) $T+ ( int + int + int ) $E+ ( + int + int ) $E T

  • 7/30/2019 041 Bottom Up Parsing

    20/140

  • 7/30/2019 041 Bottom Up Parsing

    21/140

  • 7/30/2019 041 Bottom Up Parsing

    22/140

  • 7/30/2019 041 Bottom Up Parsing

    23/140

  • 7/30/2019 041 Bottom Up Parsing

    24/140

  • 7/30/2019 041 Bottom Up Parsing

    25/140

  • 7/30/2019 041 Bottom Up Parsing

    26/140

  • 7/30/2019 041 Bottom Up Parsing

    27/140

  • 7/30/2019 041 Bottom Up Parsing

    28/140

  • 7/30/2019 041 Bottom Up Parsing

    29/140

    A left-to-right, bottom-up parse is a rightmost

    derivation traced in reverse.

  • 7/30/2019 041 Bottom Up Parsing

    30/140

    A Third View of a Bottom-Up Parse

    int

    S

    $E

    +E T

    ( )E

    +E T

    int+E T

    intT

    int

    T

    int + ( int + int + int ) $

    int + (int + int + int) $

    T + (int + int + int) $E + (int + int + int) $E + (T + int + int) $E + (E + int + int) $E + (E + T + int) $E + (E + int) $E + (E + T) $E + (E) $E + T $E $

    S

  • 7/30/2019 041 Bottom Up Parsing

    31/140

    A Third View of a Bottom-Up Parse

    int

    S

    $E

    +E T

    ( )E

    +E T

    int+E T

    intT

    int

    T

    int + ( int + int + int ) $

    int + (int + int + int) $

    T + (int + int + int) $E + (int + int + int) $E + (T + int + int) $E + (E + int + int) $E + (E + T + int) $

    E + (E + int) $E + (E + T) $E + (E) $E + T $E $

    S

  • 7/30/2019 041 Bottom Up Parsing

    32/140

    A Third View of a Bottom-Up ParseS

    $E

    +E T

    ( )E

    +E T

    int+E T

    intT

    int

    T

    int + ( int + int + int ) $

    int + (int + int + int) $

    T + (int + int + int) $E + (int + int + int) $E + (T + int + int) $E + (E + int + int) $E + (E + T + int) $

    E + (E + int) $E + (E + T) $E + (E) $E + T $E $

    S

  • 7/30/2019 041 Bottom Up Parsing

    33/140

    A Third View of a Bottom-Up ParseS

    $E

    +E T

    ( )E

    +E T

    int+E T

    intT

    int

    int + ( int + int + int ) $

    int + (int + int + int) $

    T + (int + int + int) $E + (int + int + int) $E + (T + int + int) $E + (E + int + int) $E + (E + T + int) $

    E + (E + int) $E + (E + T) $E + (E) $E + T $E $

    S

  • 7/30/2019 041 Bottom Up Parsing

    34/140

    A Third View of a Bottom-Up ParseS

    $E

    +E T

    ( )E

    +E T

    int+E T

    intT

    int + ( int + int + int ) $

    int + (int + int + int) $

    T + (int + int + int) $E + (int + int + int) $E + (T + int + int) $E + (E + int + int) $E + (E + T + int) $

    E + (E + int) $E + (E + T) $E + (E) $E + T $E $

    S

  • 7/30/2019 041 Bottom Up Parsing

    35/140

    A Third View of a Bottom-Up ParseS

    $E

    +E T

    ( )E

    +E T

    int+E T

    int

    int + ( int + int + int ) $

    int + (int + int + int) $

    T + (int + int + int) $E + (int + int + int) $E + (T + int + int) $E + (E + int + int) $E + (E + T + int) $

    E + (E + int) $E + (E + T) $E + (E) $E + T $E $

    S

  • 7/30/2019 041 Bottom Up Parsing

    36/140

    A Third View of a Bottom-Up ParseS

    $E

    +E T

    ( )E

    +E T

    int+E T

    int + ( int + int + int ) $

    int + (int + int + int) $

    T + (int + int + int) $E + (int + int + int) $E + (T + int + int) $E + (E + int + int) $E + (E + T + int) $

    E + (E + int) $E + (E + T) $E + (E) $E + T $E $

    S

  • 7/30/2019 041 Bottom Up Parsing

    37/140

    A Third View of a Bottom-Up ParseS

    $E

    +E T

    ( )E

    +E T

    int

    int + ( int + int + int ) $

    int + (int + int + int) $

    T + (int + int + int) $E + (int + int + int) $E + (T + int + int) $E + (E + int + int) $E + (E + T + int) $

    E + (E + int) $E + (E + T) $E + (E) $E + T $E $

    S

  • 7/30/2019 041 Bottom Up Parsing

    38/140

    A Third View of a Bottom-Up ParseS

    $E

    +E T

    ( )E

    +E T

    int + ( int + int + int ) $

    int + (int + int + int) $

    T + (int + int + int) $E + (int + int + int) $E + (T + int + int) $E + (E + int + int) $E + (E + T + int) $

    E + (E + int) $E + (E + T) $E + (E) $E + T $E $

    S

  • 7/30/2019 041 Bottom Up Parsing

    39/140

    A Third View of a Bottom-Up ParseS

    $E

    +E T

    ( )E

    int + ( int + int + int ) $

    int + (int + int + int) $

    T + (int + int + int) $E + (int + int + int) $E + (T + int + int) $E + (E + int + int) $E + (E + T + int) $

    E + (E + int) $E + (E + T) $E + (E) $E + T $E $

    S

  • 7/30/2019 041 Bottom Up Parsing

    40/140

    A Third View of a Bottom-Up ParseS

    $E

    +E T

    int + ( int + int + int ) $

    int + (int + int + int) $

    T + (int + int + int) $E + (int + int + int) $E + (T + int + int) $E + (E + int + int) $E + (E + T + int) $

    E + (E + int) $E + (E + T) $E + (E) $E + T $E $

    S

    A Thi d Vi f B tt U P

  • 7/30/2019 041 Bottom Up Parsing

    41/140

    A Third View of a Bottom-Up ParseS

    $E

    int + ( int + int + int ) $

    int + (int + int + int) $

    T + (int + int + int) $E + (int + int + int) $E + (T + int + int) $E + (E + int + int) $E + (E + T + int) $

    E + (E + int) $E + (E + T) $E + (E) $E + T $E $

    S

    A Thi d Vi f B tt U P

  • 7/30/2019 041 Bottom Up Parsing

    42/140

    A Third View of a Bottom-Up ParseS

    int + ( int + int + int ) $

    int + (int + int + int) $

    T + (int + int + int) $E + (int + int + int) $E + (T + int + int) $E + (E + int + int) $E + (E + T + int) $

    E + (E + int) $E + (E + T) $E + (E) $E + T $E $

    S

    H dl

  • 7/30/2019 041 Bottom Up Parsing

    43/140

    Handles

    A reduction transforms uwv to uAv if A w is aproduction.

    A handle of a sentential form x ia a substring wanda production A wwhere reducing.

    uwv uAv

    allows the start symbol to be reached from uAv.

    Informally, a production we can reverse without

    getting stuck. A left-to-right, bottom-up parse always prunes the

    leftmost handle.

    A D t il b t H dl

  • 7/30/2019 041 Bottom Up Parsing

    44/140

    A Detail about Handles

    S E$E FE E + FF F * TF TT intT (E)

    int + int * int $

    A D t il b t H dl

  • 7/30/2019 041 Bottom Up Parsing

    45/140

    A Detail about Handles

    S E$E FE E + FF F * TF T

    T intT (E)

    int + int * int $

    T

    A Detail about Handles

  • 7/30/2019 041 Bottom Up Parsing

    46/140

    A Detail about Handles

    S E$E FE E + FF F * TF T

    T intT (E)

    int + int * int $

    T

    F

    A Detail about Handles

  • 7/30/2019 041 Bottom Up Parsing

    47/140

    A Detail about Handles

    S E$E FE E + FF F * TF T

    T intT (E)

    int + int * int $

    T

    E

    F

    A Detail about Handles

  • 7/30/2019 041 Bottom Up Parsing

    48/140

    A Detail about Handles

    S E$E FE E + FF F * TF T

    T intT (E)

    int + int * int $

    T

    E

    T

    F

    A Detail about Handles

  • 7/30/2019 041 Bottom Up Parsing

    49/140

    A Detail about Handles

    S E$E FE E + FF F * TF T

    T intT (E)

    int + int * int $

    T

    E

    T

    F F

    A Detail about Handles

  • 7/30/2019 041 Bottom Up Parsing

    50/140

    A Detail about Handles

    S E$E FE E + FF F * TF T

    T intT (E)

    int + int * int $

    T

    E

    T

    F F

    E

    A Detail about Handles

  • 7/30/2019 041 Bottom Up Parsing

    51/140

    A Detail about Handles

    S E$E FE E + FF F * TF T

    T intT (E)

    int + int * int $

    T

    E

    T

    F F

    E

    A Detail about Handles

  • 7/30/2019 041 Bottom Up Parsing

    52/140

    A Detail about Handles

    S E$E FE E + FF F * TF T

    T intT (E)

    int + int * int $

    T

    E

    T

    F F

    E

    This reduction

    wasn't a handle!

    A Detail about Handles

  • 7/30/2019 041 Bottom Up Parsing

    53/140

    A Detail about Handles

    S E$E FE E + FF F * TF T

    T intT (E)

    int + int * int $

    T

    E

    T

    F F

    E

    This reduction

    wasn't a handle!

    I LIED!

  • 7/30/2019 041 Bottom Up Parsing

    54/140

    The leftmost reduction isn't

    always the leftmost handle.

    Finding Handles

  • 7/30/2019 041 Bottom Up Parsing

    55/140

    Finding Handles

    Where do we look for handles? What parts of the string might have a handle in it?

    How do we search for handles?

    What algorithm do we use to try to discover a handle? How do we recognize handles?

    Once we've found a possible handle, how do weconfirm that it's correct?

    The first two questions have definitiveanswers.

  • 7/30/2019 041 Bottom Up Parsing

    56/140

    Question One:

    Where are handles?

  • 7/30/2019 041 Bottom Up Parsing

    57/140

    Right here...

    Where can we find handles?

  • 7/30/2019 041 Bottom Up Parsing

    58/140

    Where can we find handles?

    Recall: left-to-right, bottom-up parse is arightmost derivation traced in reverse.

    Suppose that our current form is uvwand thehandle is A v.

    Then after reducing the handle, we get uAw.

    Can wcontain any nonterminals?

    No: Otherwise we would have reduced ahandle somewhere in w.

    Shift/Reduce Parsing

  • 7/30/2019 041 Bottom Up Parsing

    59/140

    Shift/Reduce Parsing

    Idea: Split the input into two parts: Left substring is our work area.

    Right substring is input we have not yet processed.

    All handles are reduced in the left substring. Right substring consists only of terminals.

    At each point, decide whether to:

    Move a terminal across the split (shift) Reduce a handle (reduce)

    A Sample Shift/Reduce Parse

  • 7/30/2019 041 Bottom Up Parsing

    60/140

    A Sample Shift/Reduce Parse

    S E$E F

    E E + FF T * FF TT intT (E)

    + int * int +int

    S E$E F

    E E + FF F * TF TT intT (E)

    $int

    A Sample Shift/Reduce Parse

  • 7/30/2019 041 Bottom Up Parsing

    61/140

    Sa p e S / educe a se

    S E$E F

    E E + FF T * FF TT intT (E)

    + int * int +int

    S E$E F

    E E + FF F * TF TT intT (E)

    int

    $int

    A Sample Shift/Reduce Parse

  • 7/30/2019 041 Bottom Up Parsing

    62/140

    p

    S E$E F

    E E + FF T * FF TT intT (E)

    + int * int +int

    S E$E F

    E E + FF F * TF TT intT (E) T

    int

    T $int

    A Sample Shift/Reduce Parse

  • 7/30/2019 041 Bottom Up Parsing

    63/140

    p

    S E$E F

    E E + FF T * FF TT intT (E)

    + int * int +int

    S E$E F

    E E + FF F * TF TT intT (E) T

    int

    F

    F $int

    A Sample Shift/Reduce Parse

  • 7/30/2019 041 Bottom Up Parsing

    64/140

    p

    S E$E F

    E E+

    FF T * FF TT intT (E)

    + int * int +int

    S E$E F

    E E + FF F * TF TT intT (E) T

    int

    F

    E

    E $int

    A Sample Shift/Reduce Parse

  • 7/30/2019 041 Bottom Up Parsing

    65/140

    p

    S E$E F

    E E+

    FF T * FF TT intT (E)

    + int * int +int

    S E$E F

    E E+

    FF F * TF TT intT (E) T

    int

    F

    E

    +

    E $int

    A Sample Shift/Reduce Parse

  • 7/30/2019 041 Bottom Up Parsing

    66/140

    p

    S E$E F

    E E+

    FF T * FF TT intT (E)

    + int * int +int

    S E$E F

    E E+

    FF F * TF TT intT (E) T

    int

    F

    E

    + int

    E $int

    A Sample Shift/Reduce Parse

  • 7/30/2019 041 Bottom Up Parsing

    67/140

    S E$E F

    E E+

    FF T * FF TT intT (E)

    + int * int +int

    S E$E F

    E E+

    FF F * TF TT intT (E) T

    int

    F

    E

    + int

    T

    E $intT

    A Sample Shift/Reduce Parse

  • 7/30/2019 041 Bottom Up Parsing

    68/140

    S E$E FE E + FF T * FF TT intT (E)

    + int * int +int

    S E$E FE E + FF F * TF TT intT (E) T

    int

    F

    E

    + int

    T

    F

    E $intF

    A Sample Shift/Reduce Parse

  • 7/30/2019 041 Bottom Up Parsing

    69/140

    S E$E FE E + FF T * FF TT intT (E)

    + int * int +int

    S E$E FE E + FF F * TF TT intT (E) T

    int

    F

    E

    + int *

    T

    F

    E $intF

    A Sample Shift/Reduce Parse

  • 7/30/2019 041 Bottom Up Parsing

    70/140

    S E$E FE E + FF T * FF TT intT (E)

    + int * int +int

    S E$E FE E + FF F * TF TT intT (E) T

    int

    F

    E

    + int * int

    T

    F

    E $intF

    A Sample Shift/Reduce Parse

  • 7/30/2019 041 Bottom Up Parsing

    71/140

    S E$E FE E + FF T * FF TT intT (E)

    + int * int +int

    S E$E FE E + FF F * TF TT intT (E) T

    int

    F

    E

    + int * int

    T

    F

    T

    E $intF T

    A Sample Shift/Reduce Parse

  • 7/30/2019 041 Bottom Up Parsing

    72/140

    S E$E FE E + FF T * FF TT intT (E)

    + int * int +int

    S E$E FE E + FF F * TF TT intT (E) T

    int

    F

    E

    + int * int

    T

    F

    T

    F

    E $intF

    A Sample Shift/Reduce Parse

  • 7/30/2019 041 Bottom Up Parsing

    73/140

    S E$E FE E + FF T * FF TT intT (E)

    + int * int +int

    S E$E FE E + FF F * TF TT intT (E) T

    int

    F

    E

    E

    + int * int

    T

    F

    T

    F

    E $int

    A Sample Shift/Reduce Parse

  • 7/30/2019 041 Bottom Up Parsing

    74/140

    S E$E FE E + FF T * FF TT intT (E)

    + int * int +int

    S E$E FE E + FF F * TF TT intT (E) T

    int

    F

    E

    E

    + int * int +

    T

    F

    T

    F

    E $int

    A Sample Shift/Reduce Parse

  • 7/30/2019 041 Bottom Up Parsing

    75/140

    S E$E FE E + FF T * FF TT intT (E)

    int+ int * int +int

    S E$E FE E + FF F * TF TT intT (E) T

    int

    F

    E

    E

    + intint * int +

    T

    F

    T

    F

    E $

    A Sample Shift/Reduce Parse

  • 7/30/2019 041 Bottom Up Parsing

    76/140

    S E$E FE E + FF T * FF TT intT (E)

    int+ int * int +int

    S E$E FE E + FF F * TF TT intT (E) T

    int

    F

    E

    E

    + intint * int +

    T

    F

    T

    F

    T

    E $T

    A Sample Shift/Reduce Parse

  • 7/30/2019 041 Bottom Up Parsing

    77/140

    S E$E FE E + FF T * FF TT intT (E)

    int+ int * int +int

    S E$E FE E + FF F * TF TT intT (E) T

    int

    F

    E

    E

    + intint * int +

    T

    F

    T

    F

    T

    F

    E $F

    A Sample Shift/Reduce Parse

  • 7/30/2019 041 Bottom Up Parsing

    78/140

    S E$E FE E + FF T * FF TT intT (E)

    int+ int * int +int

    S E$E FE E + FF F * TF TT intT (E) T

    int

    F

    E

    E

    + intint * int +

    T

    F

    T

    F

    T

    F

    E

    E $

    A Sample Shift/Reduce Parse

  • 7/30/2019 041 Bottom Up Parsing

    79/140

    S E$E FE E + FF T * FF TT intT (E)

    int+ int * int $+int

    S E$E FE E + FF F * TF TT intT (E) T

    int

    F

    E

    E

    + intint * int $+

    T

    F

    T

    F

    T

    F

    E

    E

    A Sample Shift/Reduce Parse

    S

  • 7/30/2019 041 Bottom Up Parsing

    80/140

    S E$E FE E + FF T * FF TT intT (E)

    int+ int * int $+int

    S E$E FE E + FF F * TF TT intT (E) T

    int

    F

    E

    E

    + intint * int $+

    T

    F

    T

    F

    T

    F

    E

    S

    S

    An Important Observation

  • 7/30/2019 041 Bottom Up Parsing

    81/140

    All of the reductions we applied were to the far right end of theleft area.

    This is not a coincidence!

    No matter what grammar we use, this will be true.

    Proof sketch: by induction on the number of reduces After no reduces, the first reduction can be done at the right end of

    the left area.

    After at least one reduce, the very right of the left area is anonterminal. This nonterminal must be part of the next reduction,

    since we're tracing a rightmost derivation backwards.

    An Important Corollary

  • 7/30/2019 041 Bottom Up Parsing

    82/140

    Since reductions are always at the right side ofthe left area, we never need to shift from theleft to the right.

    Why?

    No need to uncover something to do a reduction.

    Consequently, shift/reduce parsing means

    Shift: Move a terminal from the right to the left area.

    Reduce: Replace some number of symbols at theright side of the left area.

    Simplifying our Terminology

  • 7/30/2019 041 Bottom Up Parsing

    83/140

    All activity in a shift/reduce parser is at the farright end of the left area.

    Idea: Represent the left area as a stack.

    Shift: Push the next terminal onto the stack. Reduce: Pop some number of symbols from

    the stack, then push the appropriatenonterminal.

    Finding Handles

  • 7/30/2019 041 Bottom Up Parsing

    84/140

    Where do we look for handles? At the top of the stack.

    How do we search for handles?

    What algorithm do we use to try to discover ahandle?

    How do we recognize handles?

    Once we've found a possible handle, how do we

    confirm that it's correct?

  • 7/30/2019 041 Bottom Up Parsing

    85/140

    Question Two:

    How do we search for handles?

    Searching for Handles

  • 7/30/2019 041 Bottom Up Parsing

    86/140

    When using a shift/reduce parser, we mustdecide whether to shift or reduce at each point.

    We only want to reduce when we know wehave a handle.

    Question: How can we tell that we might belooking at a handle?

    Viable Prefixes

  • 7/30/2019 041 Bottom Up Parsing

    87/140

    A viable prefix is a stringw

    such that, for somev, w | v is a legal configuration in a shift/reduceparser.

    In other words, a viable prefix is

    a string of terminals and nonterminals,

    that does not extend past a handle,

    that can be completed with terminals into a

    sentential form.

    Why Care about Viable Prefixes?

  • 7/30/2019 041 Bottom Up Parsing

    88/140

    As long as the stack contains a viable prefix,we can always extend what we have.

    Leads to a nave parsing algorithm:

    Shift if doing so leaves the stack containing aviable prefix.

    Otherwise, reduce if we have found a handle anderrorif the input is malformed.

    Critical Fact

  • 7/30/2019 041 Bottom Up Parsing

    89/140

    The set of viable prefixes for anygrammar is a regular language.

    Critical Fact

  • 7/30/2019 041 Bottom Up Parsing

    90/140

    The set of viable prefixes for anygrammar is a regular language.

    This is a nontrivial result!

    Viable Prefixes are Regular: Intuition

  • 7/30/2019 041 Bottom Up Parsing

    91/140

    Intuition: Unbounded memory makes somecontext-free languages not regular.

    For example: balanced parentheses.

    A viable prefix does not contain any completeproductions. If it did, one would be a handle and we could

    reduce it.

    Consequently, we can't use any of thatmemory.

    Viable Prefixes are Regular: Intuition

  • 7/30/2019 041 Bottom Up Parsing

    92/140

    A viable prefix is the concatenation of severalpartial productions.

    Keep track ofwhich productions and where weare in those productions.

    Finitely many places you can be in a particularproduction.

    Finitely many different productions to choose ateach point.

    Build an automaton to track the currentproduction and current position.

    Tracking our Position in Productions

  • 7/30/2019 041 Bottom Up Parsing

    93/140

    S E$E TE E + TT intT (E)

    int+ int * int $+intint + )( int + $int

    Tracking our Position in Productions

  • 7/30/2019 041 Bottom Up Parsing

    94/140

    S E$E TE E + TT intT (E)

    int+ int * int $+intint + )( int + $int

    S E$

    Tracking our Position in Productions

  • 7/30/2019 041 Bottom Up Parsing

    95/140

    S E$E TE E + TT intT (E)

    int+ int * int $+intint + )( int + $int

    S E$E E + T

    Tracking our Position in Productions

  • 7/30/2019 041 Bottom Up Parsing

    96/140

    S E$E TE E + TT intT (E)

    int+ int * int $+intint + )( int + $int

    S E$E E + T

    E T

    Tracking our Position in Productions

  • 7/30/2019 041 Bottom Up Parsing

    97/140

    S E$E TE E + TT intT (E)

    int+ int * int $+intint + )( int + $int

    S E$E E + T

    E T

    T int

    Tracking our Position in Productions

  • 7/30/2019 041 Bottom Up Parsing

    98/140

    S E$

    E TE E + TT intT (E)

    int+ int * int $+int + )( int + $int

    S E$E E + T

    E T

    T int

    Tracking our Position in Productions

  • 7/30/2019 041 Bottom Up Parsing

    99/140

    S E$

    E TE E + TT intT (E)

    int+ int * int $+int + )( int + $int

    S E$E E + T

    E T

    T int

    Tracking our Position in Productions

  • 7/30/2019 041 Bottom Up Parsing

    100/140

    S E$

    E TE E + TT intT (E)

    int+ int * int $+T + )( int + $int

    S E$

    E E + T

    E T

    T int

    Tracking our Position in Productions

  • 7/30/2019 041 Bottom Up Parsing

    101/140

    S E$

    E TE E + TT intT (E)

    int+ int * int $+T + )( int + $int

    S E$

    E E + T

    E T

    Tracking our Position in Productions

  • 7/30/2019 041 Bottom Up Parsing

    102/140

    S E$E TE E + TT intT (E)

    int+ int * int $+E + )( int + $int

    S E$

    E E + T

    E T

    Tracking our Position in Productions

    S E

    $

  • 7/30/2019 041 Bottom Up Parsing

    103/140

    S E$E TE E + TT intT (E)

    int+ int * int $+E + )( int + $int

    S E$

    E E + T

    Tracking our Position in Productions

    S E$

    S E$

  • 7/30/2019 041 Bottom Up Parsing

    104/140

    S E$E TE E + TT intT (E)

    intint * int $+E + )( int + $int

    S E$

    E E + T

    Tracking our Position in Productions

    S E$

    S E$

  • 7/30/2019 041 Bottom Up Parsing

    105/140

    S E$E TE E + TT intT (E)

    intint * int $+E + )( int + $int

    S E$

    E E + T

    Tracking our Position in Productions

    S E$

    S E$

  • 7/30/2019 041 Bottom Up Parsing

    106/140

    S E$E TE E + TT intT (E)

    intint * int $+E + )( int + $int

    S E$

    E E + T

    T (E)

    Tracking our Position in Productions

    S E$

    S E$

  • 7/30/2019 041 Bottom Up Parsing

    107/140

    S E$E TE E + TT intT (E)

    int* int $+E + )( int + $int

    S E$

    E E + T

    T (E)

    Tracking our Position in Productions

    S E$

    S E$

  • 7/30/2019 041 Bottom Up Parsing

    108/140

    S E$E TE E + TT intT (E)

    int* int $+E + )( int + $int

    S E$

    E E + T

    T ( E)

    Tracking our Position in Productions

    S E$

    S E$

  • 7/30/2019 041 Bottom Up Parsing

    109/140

    S E$E TE E + TT intT (E)

    int* int $+E + )( int + $int

    S E$

    E E + T

    T ( E)

    E E + T

    Tracking our Position in Productions

    S E$

    S E$

  • 7/30/2019 041 Bottom Up Parsing

    110/140

    S E$E TE E + TT intT (E)

    int* int $+E + )( int + $int

    S E$

    E E + T

    T ( E)

    E E + T

    E T

    Tracking our Position in Productions

    S E$

    S E$

  • 7/30/2019 041 Bottom Up Parsing

    111/140

    S E$E TE E + TT intT (E)

    int* int $+E + )( int + $int

    S E$

    E E + T

    T ( E)

    E E + T

    E TT int

    Tracking our Position in Productions

    S E$

    S E$

  • 7/30/2019 041 Bottom Up Parsing

    112/140

    S E$E TE E + TT intT (E)

    intint $+E + )( int + $int

    S E$

    E E + T

    T ( E)

    E E + T

    E TT int

    Tracking our Position in Productions

    S E$

    S E$

  • 7/30/2019 041 Bottom Up Parsing

    113/140

    S E$E TE E + TT intT (E)

    intint $+E + )( int + $int

    S E$

    E E + T

    T ( E)

    E E + T

    E TT int

    Tracking our Position in Productions

    S E$

    S E$

  • 7/30/2019 041 Bottom Up Parsing

    114/140

    S E$E TE E + TT intT (E)

    intint $+E + )( + $int

    S E$

    E E + T

    T ( E)

    E E + T

    E TT int

    T

    Tracking our Position in Productions

    S E$

    S E$

  • 7/30/2019 041 Bottom Up Parsing

    115/140

    $

    E TE E + TT intT (E)

    intint $+E + )( + $int

    $

    E E + T

    T ( E)

    E E + T

    E T

    T

    Tracking our Position in Productions

    S E$

    S E$

  • 7/30/2019 041 Bottom Up Parsing

    116/140

    $

    E TE E + TT intT (E)

    intint $+E + )( + $int

    $

    E E + T

    T ( E)

    E E + T

    E T

    E

    Tracking our Position in Productions

    S E$

    S E$

  • 7/30/2019 041 Bottom Up Parsing

    117/140

    E TE E + TT intT (E)

    intint $+E + )( + $int

    E E + T

    T ( E)

    E E + T

    E

    Tracking our Position in Productions

    S E$

    S E$

  • 7/30/2019 041 Bottom Up Parsing

    118/140

    E TE E + TT intT (E)

    intint $+E + )( + $int

    E E + T

    T ( E)

    E E + T

    E

    Tracking our Position in Productions

    S E$

    S E$

  • 7/30/2019 041 Bottom Up Parsing

    119/140

    E TE E + TT intT (E)

    int $+E + )( + $int

    E E + T

    T ( E)

    E E + T

    E

    Tracking our Position in Productions

    S E$

    S E$

  • 7/30/2019 041 Bottom Up Parsing

    120/140

    E TE E + TT intT (E)

    int $+E + )( + $int

    E E + T

    T ( E)

    E E + T

    E

    Tracking our Position in Productions

    S E$

    S E$

  • 7/30/2019 041 Bottom Up Parsing

    121/140

    E TE E + TT intT (E)

    int $+E

    + )( + $int

    E E + T

    T ( E)

    E E + T

    E

    T int

    Tracking our Position in Productions

    S E$

    S E$

  • 7/30/2019 041 Bottom Up Parsing

    122/140

    E TE E + TT intT (E)

    int $E

    + )( + $int

    E E + T

    T ( E)

    E E + T

    E

    T int

    Tracking our Position in Productions

    S E$

    S E$

  • 7/30/2019 041 Bottom Up Parsing

    123/140

    E TE E + TT intT (E)

    int $E

    + )( + $int

    E E + T

    T ( E)

    E E + T

    E

    T int

    Tracking our Position in Productions

    S E$

    S E$

  • 7/30/2019 041 Bottom Up Parsing

    124/140

    E TE E + TT intT (E)

    int $E

    + )( + $

    E E + T

    T ( E)

    E E + T

    E

    T int

    T

    Tracking our Position in Productions

    S E$

    E T

    S E$

  • 7/30/2019 041 Bottom Up Parsing

    125/140

    E TE E + TT intT (E)

    int $E

    + )( + $

    E E + T

    T ( E)

    E E + T

    E T

    Tracking our Position in Productions

    S E$

    E T

    S E$

  • 7/30/2019 041 Bottom Up Parsing

    126/140

    E TE E + TT intT (E)

    int $E

    + )( + $

    E E + T

    T ( E)

    E E + T

    E T

    Tracking our Position in Productions

    S E$

    E T

    S E$

  • 7/30/2019 041 Bottom Up Parsing

    127/140

    E TE E + TT intT (E)

    int $E

    + )( $

    E E + T

    T ( E)

    E E + T

    E

    Tracking our Position in Productions

    S E$

    E T

    S E$

    E E T

  • 7/30/2019 041 Bottom Up Parsing

    128/140

    E TE E + TT intT (E)

    int $E

    + )( $

    E E + T

    T ( E)

    E

    Tracking our Position in Productions

    S E$

    E T

    S E$

    E E T

  • 7/30/2019 041 Bottom Up Parsing

    129/140

    E TE E + TT intT (E)

    int $E

    + )( $

    E E + T

    T ( E )

    E

    Tracking our Position in Productions

    S E$

    E T

    S E$

    E E + T

  • 7/30/2019 041 Bottom Up Parsing

    130/140

    E TE E + TT intT (E)

    $E + )( $

    E E + T

    T ( E )

    E

    Tracking our Position in Productions

    S E$

    E T

    S E$

    E E + T

  • 7/30/2019 041 Bottom Up Parsing

    131/140

    E TE E + TT intT (E)

    $E + )( $

    E E + T

    T ( E )

    E

    Tracking our Position in Productions

    S E$

    E T

    S E$

    E E + T

  • 7/30/2019 041 Bottom Up Parsing

    132/140

    E TE E + TT intT (E)

    $E + $

    E E + T

    T ( E )

    T

    Tracking our Position in Productions

    S E$

    E T

    S E$

    E E + T

  • 7/30/2019 041 Bottom Up Parsing

    133/140

    E TE E + TT intT (E)

    $E + $

    E E + T

    T

    Tracking our Position in Productions

    S E$

    E T

    S E$

    E E + T

  • 7/30/2019 041 Bottom Up Parsing

    134/140

    E TE E + TT intT (E)

    $E + $

    E E + T

    T

    Tracking our Position in Productions

    S E$

    E T

    S E$

    E E + T

  • 7/30/2019 041 Bottom Up Parsing

    135/140

    E TE E + TT intT (E)

    $E $

    E E + T

    Tracking our Position in Productions

    S E$

    E T

    S E$

  • 7/30/2019 041 Bottom Up Parsing

    136/140

    E TE E + TT intT (E)

    $E $

    Tracking our Position in Productions

    S E$

    E T

    S E $

  • 7/30/2019 041 Bottom Up Parsing

    137/140

    E TE E + TT intT (E)

    $E $

    Tracking our Position in Productions

    S E$

    E T

    S E $

  • 7/30/2019 041 Bottom Up Parsing

    138/140

    E TE E + TT intT (E)

    E $

    Tracking our Position in Productions

    S E$

    E T

    S E $

  • 7/30/2019 041 Bottom Up Parsing

    139/140

    E TE E + TT intT (E)

    E $

    Tracking our Position in Productions

    S E$

    E TE E T

    S E $

  • 7/30/2019 041 Bottom Up Parsing

    140/140

    E E + TT intT (E)

    S


Recommended