*(+num) expr expr op expr expr (expr) expr - expr expr num op + op - op * pilha buffer com string de...

Post on 17-Apr-2015

139 Views

Category:

Documents

5 Downloads

Preview:

Click to see full reader

TRANSCRIPT

* ( + num )numnum

Expr Expr Op Expr

Expr (Expr)

Expr - Expr

Expr num

Op +

Op -

Op *

Pilha

Buffer com string de entrada

SHIFT

* ( + num )numnum

Expr Expr Op Expr

Expr (Expr)

Expr - Expr

Expr num

Op +

Op -

Op *

SHIFT

* ( + num )num

num

Expr Expr Op Expr

Expr (Expr)

Expr - Expr

Expr num

Op +

Op -

Op *

* ( + num )num

num

Expr Expr Op Expr

Expr (Expr)

Expr - Expr

Expr num

Op +

Op -

Op *

REDUCE

* ( + num )num

num

Expr Expr Op Expr

Expr (Expr)

Expr - Expr

Expr num

Op +

Op -

Op *

REDUCE

Expr

* ( + num )num

num

Expr Expr Op Expr

Expr (Expr)

Expr - Expr

Expr num

Op +

Op -

Op *Expr

SHIFT

( + num )num

num

Expr Expr Op Expr

Expr (Expr)

Expr - Expr

Expr num

Op +

Op -

Op *Expr

SHIFT

*

( + num )num

num

Expr Expr Op Expr

Expr (Expr)

Expr - Expr

Expr num

Op +

Op -

Op *Expr

Op

REDUCE

*

( + num )num

num

Expr Expr Op Expr

Expr (Expr)

Expr - Expr

Expr num

Op +

Op -

Op *Expr

Op

*SHIFT

+ num )num

num

Expr Expr Op Expr

Expr (Expr)

Expr - Expr

Expr num

Op +

Op -

Op *Expr

Op

*SHIFT

(

+ num )num

num

Expr Expr Op Expr

Expr (Expr)

Expr - Expr

Expr num

Op +

Op -

Op *Expr

Op

*SHIFT

(

+ num )

num

Expr Expr Op Expr

Expr (Expr)

Expr - Expr

Expr num

Op +

Op -

Op *Expr

Op

*SHIFT

(

num

+ num )

num

Expr Expr Op Expr

Expr (Expr)

Expr - Expr

Expr num

Op +

Op -

Op *Expr

Op

*SHIFT

(

num

REDUCE

Expr

+ num )

num

Expr Expr Op Expr

Expr (Expr)

Expr - Expr

Expr num

Op +

Op -

Op *Expr

Op

*SHIFT

(

num

Expr

num )

num

Expr Expr Op Expr

Expr (Expr)

Expr - Expr

Expr num

Op +

Op -

Op *Expr

Op

*SHIFT

(

num

Expr

+

num )

num

Expr Expr Op Expr

Expr (Expr)

Expr - Expr

Expr num

Op +

Op -

Op *Expr

Op

*SHIFT

(

num

Expr

Op

REDUCE

+

num )

num

Expr Expr Op Expr

Expr (Expr)

Expr - Expr

Expr num

Op +

Op -

Op *Expr

Op

*SHIFT

(

num

Expr

Op

+

)

num

Expr Expr Op Expr

Expr (Expr)

Expr - Expr

Expr num

Op +

Op -

Op *Expr

Op

*SHIFT

(

num

Expr

num

Op

+

)

num

Expr Expr Op Expr

Expr (Expr)

Expr - Expr

Expr num

Op +

Op -

Op *Expr

Op

*SHIFT

(

num

Expr

Op

+

Expr

REDUCE

num

)

num

Expr Expr Op Expr

Expr (Expr)

Expr - Expr

Expr num

Op +

Op -

Op *Expr

Op

*SHIFT

(

num +

REDUCE

num

Expr

Expr

Op

ExprExpr

)

num

Expr Expr Op Expr

Expr (Expr)

Expr - Expr

Expr num

Op +

Op -

Op *Expr

Op

*SHIFT

(

num

Expr

Op

+

Expr

num

Expr

num

Expr Expr Op Expr

Expr (Expr)

Expr - Expr

Expr num

Op +

Op -

Op *Expr

Op

*SHIFT

(

num

Expr

Op

+

Expr

num

Expr

)

REDUCE

num

Expr Expr Op Expr

Expr (Expr)

Expr - Expr

Expr num

Op +

Op -

Op *Expr

Op

*

(

num

Expr

Op

+

Expr

num

Expr

)Expr

REDUCE

num

Expr Expr Op Expr

Expr (Expr)

Expr - Expr

Expr num

Op +

Op -

Op *Expr

Op

*

(

num

Expr

Op

+

Expr

num

Expr

)Expr

Expr

ACCEPT!

num

Expr Expr Op Expr

Expr (Expr)

Expr - Expr

Expr num

Op +

Op -

Op *Expr

Op

*

(

num

Expr

Op

+

Expr

num

Expr

)Expr

Expr

Conflitos que podem Ocorrer

Conflito Reduce/Reduce O topo da pilha pode “casar” com RHS de

produções múltiplas Qual a produção a utilizar na redução?

Conflito Shift/Reduce Pilha pode “casar” com RHS da produção Mas esse pode não ser o “casamento”

correcto Pode ser necessário deslocar a entrada e

encontrar mais tarde uma redução diferente

Expr Expr Op Expr

Expr (Expr)

Expr - Expr

Expr num

Op +

Op -

Op *

Conflitos

Gramática Original Nova Gramática

Expr Expr Op Expr

Expr Expr - Expr

Expr (Expr)

Expr Expr - Expr num

Op +

Op -

Op *

- numnum

ConflitosExpr Expr Op Expr

Expr Expr - Expr

Expr (Expr)

Expr Expr -

Expr num

Op +

Op -

Op *

- numnum

SHIFT

ConflitosExpr Expr Op Expr

Expr Expr - Expr

Expr (Expr)

Expr Expr -

Expr num

Op +

Op -

Op *

- num

SHIFT

num

ConflitosExpr Expr Op Expr

Expr Expr - Expr

Expr (Expr)

Expr Expr -

Expr num

Op +

Op -

Op *

- num

SHIFT

Expr

REDUCE

num

ConflitosExpr Expr Op Expr

Expr Expr - Expr

Expr (Expr)

Expr Expr -

Expr num

Op +

Op -

Op *

- num

SHIFT

Expr

num

ConflitosExpr Expr Op Expr

Expr Expr - Expr

Expr (Expr)

Expr Expr -

Expr num

Op +

Op -

Op *

num

SHIFT

Expr

num

-

ConflitosExpr Expr Op Expr

Expr Expr - Expr

Expr (Expr)

Expr Expr -

Expr num

Op +

Op -

Op *

num

Expr

num

-

Opções:Reduce

Reduce

Shift

Conflito shift/reduce/reduceExpr Expr Op Expr

Expr Expr - Expr

Expr (Expr)

Expr Expr -

Expr num

Op +

Op -

Op *

num

Expr

num

-

REDUCE

Conflito shift/reduce/reduceExpr Expr Op Expr

Expr Expr - Expr

Expr (Expr)

Expr Expr -

Expr num

Op +

Op -

Op *

O que acontece se escolhernos Reduce

num

Expr

num -

SHIFT

Expr

Conflito shift/reduce/reduceExpr Expr Op Expr

Expr Expr - Expr

Expr (Expr)

Expr Expr -

Expr num

Op +

Op -

Op *

O que acontece se escolhernos Reduce

Expr

num -

SHIFT

Expr

num

Conflito shift/reduce/reduceExpr Expr Op Expr

Expr Expr - Expr

Expr (Expr)

Expr Expr -

Expr num

Op +

Op -

Op *

O que acontece se escolhernos Reduce

Expr

num -

Expr Expr Op Expr

Expr Expr - Expr

Expr (Expr)

Expr Expr -

Expr num

Op +

Op -

Op *

O que acontece se escolhernos Reduce

REDUCE

Expr

Expr

num

Conflito shift/reduce/reduce

Expr

num -

FAILS!

Expr

Expr

num

Expr Expr Op Expr

Expr Expr - Expr

Expr (Expr)

Expr Expr -

Expr num

Op +

Op -

Op *

O que acontece se escolhernos Reduce

Conflito shift/reduce/reduce

num

Expr

num

-

Utilizando o outro Reduce

Conflito shift/reduce/reduceExpr Expr Op Expr

Expr Expr - Expr

Expr (Expr)

Expr Expr -

Expr num

Op +

Op -

Op *

num

Expr

num

-

Utilizando o outro Reduce

Conflito shift/reduce/reduceExpr Expr Op Expr

Expr Expr - Expr

Expr (Expr)

Expr Expr -

Expr num

Op +

Op -

Op *

num

Expr

num

Op

-

REDUCE

Conflito shift/reduce/reduce

Utilizando o outro ReduceExpr Expr Op Expr

Expr Expr - Expr

Expr (Expr)

Expr Expr -

Expr num

Op +

Op -

Op *

Expr

num

Op

-

SHIFT

num

Utilizando o outro ReduceExpr Expr Op Expr

Expr Expr - Expr

Expr (Expr)

Expr Expr -

Expr num

Op +

Op -

Op *

Conflito shift/reduce/reduce

Expr

num

Op

-

REDUCE

Expr

num

Utilizando o outro ReduceExpr Expr Op Expr

Expr Expr - Expr

Expr (Expr)

Expr Expr -

Expr num

Op +

Op -

Op *

Conflito shift/reduce/reduce

Expr

num

Op

-

REDUCE

Expr

num

Expr

Conflito shift/reduce/reduce

Utilizando o outro ReduceExpr Expr Op Expr

Expr Expr - Expr

Expr (Expr)

Expr Expr -

Expr num

Op +

Op -

Op *

Expr

num

Op

-

ACCEPT

Expr

num

Expr

Conflito shift/reduce/reduce

Utilizando o outro ReduceExpr Expr Op Expr

Expr Expr - Expr

Expr (Expr)

Expr Expr -

Expr num

Op +

Op -

Op *

num

Expr

num

-

SHIFT

Conflitos

Utilizando o ShiftExpr Expr Op Expr

Expr Expr - Expr

Expr (Expr)

Expr Expr -

Expr num

Op +

Op -

Op *

Expr

num

-

SHIFT

num

Utilizando o ShiftExpr Expr Op Expr

Expr Expr - Expr

Expr (Expr)

Expr Expr -

Expr num

Op +

Op -

Op *

Conflitos

Expr

num

-

REDUCE

Expr

num

Conflitos

Utilizando o ShiftExpr Expr Op Expr

Expr Expr - Expr

Expr (Expr)

Expr Expr -

Expr num

Op +

Op -

Op *

Expr

num -

REDUCE

Expr

num

Expr

Conflitos

Utilizando o ShiftExpr Expr Op Expr

Expr Expr - Expr

Expr (Expr)

Expr Expr -

Expr num

Op +

Op -

Op *

Expr

num -

ACCEPT

Expr

num

Expr

Conflitos

Utilizando o ShiftExpr Expr Op Expr

Expr Expr - Expr

Expr (Expr)

Expr Expr -

Expr num

Op +

Op -

Op *

top related