+ All Categories
Home > Documents > MELJUN CORTES Automata Theory 14

MELJUN CORTES Automata Theory 14

Date post: 04-Jun-2018
Category:
Upload: meljun-cortes-mbampa
View: 232 times
Download: 0 times
Share this document with a friend

of 24

Transcript
  • 8/13/2019 MELJUN CORTES Automata Theory 14

    1/24

    CSC 3130: Automata theory and formal languages

    LR(k) grammars

    Fall 2008ELJUN P. CORTES MBA MPA BSCS ACS

    MELJUN CORTES

  • 8/13/2019 MELJUN CORTES Automata Theory 14

    2/24

    LR(0) example from last time

    A aAb

    Aab

    A aAb

    A ab

    A aAbA ab

    A aAb

    A aAb

    A ab

    a

    b

    bAa

    1

    2

    3

    4

    5

    A aAb | ab

  • 8/13/2019 MELJUN CORTES Automata Theory 14

    3/24

    LR(0) parsing example revisited

    Stack Input

    S

    S

    S

    R

    S

    R

    1

    1a2

    1a2a2

    1a2a2b3

    1a2A4

    1a2A4b5

    1A

    aabb

    abb

    bb

    b

    b

    A S

    A aAb | ab A aAb aabb

    1

    2

    2

    3

    4

    5

    A

    A aAb

    Aab A aAb

    A ab

    A aAb

    A ab

    A aAb A aAb

    A ab

    a

    b

    b

    A

    a1

    2

    3

    4 5

    Aa b

    a b

  • 8/13/2019 MELJUN CORTES Automata Theory 14

    4/24

    Meaning of LR(0) items

    a

    A

    A aXb

    NFA transitions to:

    Xg

    X b

    focus

    shift focus tosubtree rooted atX

    (ifXis nonterminal)

    A aXb

    move past subtreerooted atX

  • 8/13/2019 MELJUN CORTES Automata Theory 14

    5/24

    Outline of LR(0) parsing algorithm

    Algorithm can perform two actions:

    What if:

    no complete

    item

    is valid

    there is one valid item,

    and it is complete

    shift (S) reduce (R)

    some valid itemscomplete, some

    not

    more than one validcomplete item

    S / R conflict R / R conflict

  • 8/13/2019 MELJUN CORTES Automata Theory 14

    6/24

    Definition of LR(0) grammar

    A grammar is LR(0) if S/R, R/R conflicts neveroccur

    LR means parsing happens leftto right and produces a

    rightmost derivation

    LR(0) grammars are unambiguous and have a

    fast

    parsing algorithm

    Unfortunately, they are not expressive enough

    to describe programming languages

  • 8/13/2019 MELJUN CORTES Automata Theory 14

    7/24

    context-free grammarsparse using CYK algorithm (slow)

    LR() grammars

    Hierarchy of context-free grammars

    LR(1) grammars

    LR(0) grammarsparse using LR(0) algorithm

    java

    perl

    python

  • 8/13/2019 MELJUN CORTES Automata Theory 14

    8/24

    A grammar that is not LR(0)

    S A(1)

    | Bc(2)

    A aA(3)| a(4)

    B a(5)| ab(6)

    input: a

  • 8/13/2019 MELJUN CORTES Automata Theory 14

    9/24

    A grammar that is not LR(0)

    S A(1)

    | Bc(2)

    A aA(3)| a(4)

    B a(5)| ab(6)

    A

    S

    A B

    A

    aA

    a a

    A

    a a

    S S

    ca

    input:

    possibilities:

    shift (3), reduce (4)

    reduce (5), shift (6)

    valid LR(0) items:A aA, A a

    B a, B ab,

    A aA, A a

    a

    S/R, R/R conflicts!

  • 8/13/2019 MELJUN CORTES Automata Theory 14

    10/24

    Lookahead

    S A(1)

    | Bc(2)

    A aA(3)| a(4)

    B a(5)| ab(6)

    A

    S

    A B

    A

    aA

    a a

    A

    a a

    S S

    ca

    input:

    apeek inside!

    valid LR(0) items:A aA, A a

    B a, B ab,

    A aA, A a

  • 8/13/2019 MELJUN CORTES Automata Theory 14

    11/24

    Lookahead

    S A(1)

    | Bc(2)

    A aA(3)| a(4)

    B a(5)| ab(6)

    input: a apeek inside!

    valid LR(0) items:A aA, A a

    B a, B ab,

    A aA, A a

    A

    A

    a a

    S

    parse tree must

    look like this

    action: shift

  • 8/13/2019 MELJUN CORTES Automata Theory 14

    12/24

    Lookahead

    S A(1)

    | Bc(2)

    A aA(3)| a(4)

    B a(5)| ab(6)

    input: a a apeek inside!

    valid LR(0) items:A aA, A a

    A aA, A a

    parse tree must

    look like this

    A

    A

    aA

    a

    S

    action: shift

  • 8/13/2019 MELJUN CORTES Automata Theory 14

    13/24

    Lookahead

    S A(1)

    | Bc(2)

    A aA(3)| a(4)

    B a(5)| ab(6)

    input: a a a

    valid LR(0) items:A aA, A a

    A aA, A a

    parse tree must

    look like this

    action: reduce

    A

    A

    aA

    a a

    S

  • 8/13/2019 MELJUN CORTES Automata Theory 14

    14/24

    LR(0) items vs. LR(1) items

    A

    A

    a b

    a b

    Aa b

    A aAb | ab

    A aAb

    A

    A

    a b

    a b

    Aa b

    [A aAb, b]

    LR(0) LR(1)

  • 8/13/2019 MELJUN CORTES Automata Theory 14

    15/24

    LR(1) items

    LR(1) items are of the form

    to represent this state in the parsing

    [A ab, x] [A ab, ]or

    a b x

    A

    a b

    A

  • 8/13/2019 MELJUN CORTES Automata Theory 14

    16/24

    Outline of LR(1) parsing algorithm

    Step 1: Build NFA that describes valid itemupdates

    Step 2: Convert NFA to DFA

    As in LR(0), DFA will have shiftand reducestates

    Step 3: Run DFA on input, using stack to

    remembersequence of states

    Use lookaheadto eliminate wrong reduce items

  • 8/13/2019 MELJUN CORTES Automata Theory 14

    17/24

    Recall NFA transitions for LR(0)

    Statesof NFA will be items (plus a start state q0) For every item S a we have a transition

    For every itemA aXbwe have a transition

    For every itemA aCband production C d

    S aq0

    A aXbX

    A aXb

    C dA aCb

  • 8/13/2019 MELJUN CORTES Automata Theory 14

    18/24

    NFA transitions for LR(1)

    For every item [S a,]we have a transition

    For every itemA aXbwe have a transition

    For every item [A aCb, x]and production C

    d

    for everyyin FIRST(bx)

    [S a,]q0

    [A aXb, x]X

    [A aXb, x]

    [C d,y]

    [A aCb, x]

  • 8/13/2019 MELJUN CORTES Automata Theory 14

    19/24

    FIRSTsets

    Example

    FIRST(a)is the set of terminals that occuron the left in some derivation starting

    from a

    S A(1)| cB(2)

    A aA(3)| a(4)

    B

    a

    (5)

    | ab

    (6)

    FIRST(a) = {a}

    FIRST(A) = {a}

    FIRST(S) = {a, c}

    FIRST(bAc) = {b}FIRST(BA) = {a}

    FIRST() =

  • 8/13/2019 MELJUN CORTES Automata Theory 14

    20/24

    Explaining the transitions

    [A aXb, x]X

    [A aXb, x]

    [C d,y]

    [A aCb, x]

    a

    A

    C b x

    a

    A

    X b x a

    A

    X b x

    yFIRST(bx)

    y

    C b

    d

  • 8/13/2019 MELJUN CORTES Automata Theory 14

    21/24

    Example

    S

    A

    (1)

    | Bc

    (2)

    A aA(3)| a(4)

    B a(5)| ab(6)

    [S A,]

    q0

    [S Bc,]

    [S A,]

    A[A aA,]

    [B a,c]

    [S Bc,]

    [B ab,c]

    . . .

    B

    [A a,]

  • 8/13/2019 MELJUN CORTES Automata Theory 14

    22/24

    Convert NFA to DFA

    Each DFA state is a subset of LR(1) items, e.g.

    States can contain S/R, R/R conflicts

    But lookaheadcan always resolve such conflicts

    [A aA, ] [A a, ]

    [B a, c] [B ab, c]

    [A aA, ] [A a, ]

  • 8/13/2019 MELJUN CORTES Automata Theory 14

    23/24

    Example

    S A(1)

    | Bc(2)

    A aA(3)| a(4)

    B a(5)| ab(6)

    stack input

    a

    abB

    Bc

    S

    abc

    bc

    cc

    A valid items

    [S A, ] [S Bc, ] [A aA, ][A a, ] [B a, c] [B ab, c]

    S

    SR

    S

    R

    [A aA, ] [A a, ] [B a, c]

    [B ab, c][A aA, ] [A a, ]

    [B ab, c][S Bc, ]

    [S Bc, ]

    look ahead!

  • 8/13/2019 MELJUN CORTES Automata Theory 14

    24/24

    LR(k) grammars

    A context-free grammar is LR(1) if all S/R, R/Rconflicts can be resolved with one lookahead

    More generally, LR(k) grammars can resolve allconflicts with klookahead symbols

    Items have the form [A ab, x1...xk]

    LR(1) grammars describe the semantics of most

    programming languages


Recommended