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

51
* ( + num ) num num Expr Expr Op Expr Expr (Expr) Expr - Expr Expr num Op + Op - Op * Pilha Buffer com string de entrada

Upload: internet

Post on 17-Apr-2015

129 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: *(+num) Expr Expr Op Expr Expr (Expr) Expr - Expr Expr num Op + Op - Op * Pilha Buffer com string de entrada

* ( + num )numnum

Expr Expr Op Expr

Expr (Expr)

Expr - Expr

Expr num

Op +

Op -

Op *

Pilha

Buffer com string de entrada

Page 2: *(+num) 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 *

Page 3: *(+num) Expr Expr Op Expr Expr (Expr) Expr - Expr Expr num Op + Op - Op * Pilha Buffer com string de entrada

SHIFT

* ( + num )num

num

Expr Expr Op Expr

Expr (Expr)

Expr - Expr

Expr num

Op +

Op -

Op *

Page 4: *(+num) Expr Expr Op Expr Expr (Expr) Expr - Expr Expr num Op + Op - Op * Pilha Buffer com string de entrada

* ( + num )num

num

Expr Expr Op Expr

Expr (Expr)

Expr - Expr

Expr num

Op +

Op -

Op *

REDUCE

Page 5: *(+num) Expr Expr Op Expr Expr (Expr) Expr - Expr Expr num Op + Op - Op * Pilha Buffer com string de entrada

* ( + num )num

num

Expr Expr Op Expr

Expr (Expr)

Expr - Expr

Expr num

Op +

Op -

Op *

REDUCE

Expr

Page 6: *(+num) Expr Expr Op Expr Expr (Expr) Expr - Expr Expr num Op + Op - Op * Pilha Buffer com string de entrada

* ( + num )num

num

Expr Expr Op Expr

Expr (Expr)

Expr - Expr

Expr num

Op +

Op -

Op *Expr

SHIFT

Page 7: *(+num) Expr Expr Op Expr Expr (Expr) Expr - Expr Expr num Op + Op - Op * Pilha Buffer com string de entrada

( + num )num

num

Expr Expr Op Expr

Expr (Expr)

Expr - Expr

Expr num

Op +

Op -

Op *Expr

SHIFT

*

Page 8: *(+num) Expr Expr Op Expr Expr (Expr) Expr - Expr Expr num Op + Op - Op * Pilha Buffer com string de entrada

( + num )num

num

Expr Expr Op Expr

Expr (Expr)

Expr - Expr

Expr num

Op +

Op -

Op *Expr

Op

REDUCE

*

Page 9: *(+num) Expr Expr Op Expr Expr (Expr) Expr - Expr Expr num Op + Op - Op * Pilha Buffer com string de entrada

( + num )num

num

Expr Expr Op Expr

Expr (Expr)

Expr - Expr

Expr num

Op +

Op -

Op *Expr

Op

*SHIFT

Page 10: *(+num) Expr Expr Op Expr Expr (Expr) Expr - Expr Expr num Op + Op - Op * Pilha Buffer com string de entrada

+ num )num

num

Expr Expr Op Expr

Expr (Expr)

Expr - Expr

Expr num

Op +

Op -

Op *Expr

Op

*SHIFT

(

Page 11: *(+num) Expr Expr Op Expr Expr (Expr) Expr - Expr Expr num Op + Op - Op * Pilha Buffer com string de entrada

+ num )num

num

Expr Expr Op Expr

Expr (Expr)

Expr - Expr

Expr num

Op +

Op -

Op *Expr

Op

*SHIFT

(

Page 12: *(+num) Expr Expr Op Expr Expr (Expr) Expr - Expr Expr num Op + Op - Op * Pilha Buffer com string de entrada

+ num )

num

Expr Expr Op Expr

Expr (Expr)

Expr - Expr

Expr num

Op +

Op -

Op *Expr

Op

*SHIFT

(

num

Page 13: *(+num) Expr Expr Op Expr Expr (Expr) Expr - Expr Expr num Op + Op - Op * Pilha Buffer com string de entrada

+ num )

num

Expr Expr Op Expr

Expr (Expr)

Expr - Expr

Expr num

Op +

Op -

Op *Expr

Op

*SHIFT

(

num

REDUCE

Expr

Page 14: *(+num) Expr Expr Op Expr Expr (Expr) Expr - Expr Expr num Op + Op - Op * Pilha Buffer com string de entrada

+ num )

num

Expr Expr Op Expr

Expr (Expr)

Expr - Expr

Expr num

Op +

Op -

Op *Expr

Op

*SHIFT

(

num

Expr

Page 15: *(+num) Expr Expr Op Expr Expr (Expr) Expr - Expr Expr num Op + Op - Op * Pilha Buffer com string de entrada

num )

num

Expr Expr Op Expr

Expr (Expr)

Expr - Expr

Expr num

Op +

Op -

Op *Expr

Op

*SHIFT

(

num

Expr

+

Page 16: *(+num) Expr Expr Op Expr Expr (Expr) Expr - Expr Expr num Op + Op - Op * Pilha Buffer com string de entrada

num )

num

Expr Expr Op Expr

Expr (Expr)

Expr - Expr

Expr num

Op +

Op -

Op *Expr

Op

*SHIFT

(

num

Expr

Op

REDUCE

+

Page 17: *(+num) Expr Expr Op Expr Expr (Expr) Expr - Expr Expr num Op + Op - Op * Pilha Buffer com string de entrada

num )

num

Expr Expr Op Expr

Expr (Expr)

Expr - Expr

Expr num

Op +

Op -

Op *Expr

Op

*SHIFT

(

num

Expr

Op

+

Page 18: *(+num) Expr Expr Op Expr Expr (Expr) Expr - Expr Expr num Op + Op - Op * Pilha Buffer com string de entrada

)

num

Expr Expr Op Expr

Expr (Expr)

Expr - Expr

Expr num

Op +

Op -

Op *Expr

Op

*SHIFT

(

num

Expr

num

Op

+

Page 19: *(+num) Expr Expr Op Expr Expr (Expr) Expr - Expr Expr num Op + Op - Op * Pilha Buffer com string de entrada

)

num

Expr Expr Op Expr

Expr (Expr)

Expr - Expr

Expr num

Op +

Op -

Op *Expr

Op

*SHIFT

(

num

Expr

Op

+

Expr

REDUCE

num

Page 20: *(+num) Expr Expr Op Expr Expr (Expr) Expr - Expr Expr num Op + Op - Op * Pilha Buffer com string de entrada

)

num

Expr Expr Op Expr

Expr (Expr)

Expr - Expr

Expr num

Op +

Op -

Op *Expr

Op

*SHIFT

(

num +

REDUCE

num

Expr

Expr

Op

ExprExpr

Page 21: *(+num) Expr Expr Op Expr Expr (Expr) Expr - Expr Expr num Op + Op - Op * Pilha Buffer com string de entrada

)

num

Expr Expr Op Expr

Expr (Expr)

Expr - Expr

Expr num

Op +

Op -

Op *Expr

Op

*SHIFT

(

num

Expr

Op

+

Expr

num

Expr

Page 22: *(+num) Expr Expr Op Expr Expr (Expr) Expr - Expr Expr num Op + Op - Op * Pilha Buffer com string de entrada

num

Expr Expr Op Expr

Expr (Expr)

Expr - Expr

Expr num

Op +

Op -

Op *Expr

Op

*SHIFT

(

num

Expr

Op

+

Expr

num

Expr

)

Page 23: *(+num) Expr Expr Op Expr Expr (Expr) Expr - Expr Expr num Op + Op - Op * Pilha Buffer com string de entrada

REDUCE

num

Expr Expr Op Expr

Expr (Expr)

Expr - Expr

Expr num

Op +

Op -

Op *Expr

Op

*

(

num

Expr

Op

+

Expr

num

Expr

)Expr

Page 24: *(+num) Expr Expr Op Expr Expr (Expr) Expr - Expr Expr num Op + Op - Op * Pilha Buffer com string de entrada

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

Page 25: *(+num) Expr Expr Op Expr Expr (Expr) Expr - Expr Expr num Op + Op - Op * Pilha Buffer com string de entrada

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

Page 26: *(+num) Expr Expr Op Expr Expr (Expr) Expr - Expr Expr num Op + Op - Op * Pilha Buffer com string de entrada

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

Page 27: *(+num) Expr Expr Op Expr Expr (Expr) Expr - Expr Expr num Op + Op - Op * Pilha Buffer com string de entrada

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 *

Page 28: *(+num) Expr Expr Op Expr Expr (Expr) Expr - Expr Expr num Op + Op - Op * Pilha Buffer com string de entrada

- numnum

ConflitosExpr Expr Op Expr

Expr Expr - Expr

Expr (Expr)

Expr Expr -

Expr num

Op +

Op -

Op *

Page 29: *(+num) Expr Expr Op Expr Expr (Expr) Expr - Expr Expr num Op + Op - Op * Pilha Buffer com string de entrada

- numnum

SHIFT

ConflitosExpr Expr Op Expr

Expr Expr - Expr

Expr (Expr)

Expr Expr -

Expr num

Op +

Op -

Op *

Page 30: *(+num) Expr Expr Op Expr Expr (Expr) Expr - Expr Expr num Op + Op - Op * Pilha Buffer com string de entrada

- num

SHIFT

num

ConflitosExpr Expr Op Expr

Expr Expr - Expr

Expr (Expr)

Expr Expr -

Expr num

Op +

Op -

Op *

Page 31: *(+num) Expr Expr Op Expr Expr (Expr) Expr - Expr Expr num Op + Op - Op * Pilha Buffer com string de entrada

- num

SHIFT

Expr

REDUCE

num

ConflitosExpr Expr Op Expr

Expr Expr - Expr

Expr (Expr)

Expr Expr -

Expr num

Op +

Op -

Op *

Page 32: *(+num) Expr Expr Op Expr Expr (Expr) Expr - Expr Expr num Op + Op - Op * Pilha Buffer com string de entrada

- num

SHIFT

Expr

num

ConflitosExpr Expr Op Expr

Expr Expr - Expr

Expr (Expr)

Expr Expr -

Expr num

Op +

Op -

Op *

Page 33: *(+num) Expr Expr Op Expr Expr (Expr) Expr - Expr Expr num Op + Op - Op * Pilha Buffer com string de entrada

num

SHIFT

Expr

num

-

ConflitosExpr Expr Op Expr

Expr Expr - Expr

Expr (Expr)

Expr Expr -

Expr num

Op +

Op -

Op *

Page 34: *(+num) Expr Expr Op Expr Expr (Expr) Expr - Expr Expr num Op + Op - Op * Pilha Buffer com string de entrada

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 *

Page 35: *(+num) Expr Expr Op Expr Expr (Expr) Expr - Expr Expr num Op + Op - Op * Pilha Buffer com string de entrada

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

Page 36: *(+num) Expr Expr Op Expr Expr (Expr) Expr - Expr Expr num Op + Op - Op * Pilha Buffer com string de entrada

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

Page 37: *(+num) Expr Expr Op Expr Expr (Expr) Expr - Expr Expr num Op + Op - Op * Pilha Buffer com string de entrada

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

Page 38: *(+num) Expr Expr Op Expr Expr (Expr) Expr - Expr Expr num Op + Op - Op * Pilha Buffer com string de entrada

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

Page 39: *(+num) Expr Expr Op Expr Expr (Expr) Expr - Expr Expr num Op + Op - Op * Pilha Buffer com string de entrada

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

Page 40: *(+num) Expr Expr Op Expr Expr (Expr) Expr - Expr Expr num Op + Op - Op * Pilha Buffer com string de entrada

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 *

Page 41: *(+num) Expr Expr Op Expr Expr (Expr) Expr - Expr Expr num Op + Op - Op * Pilha Buffer com string de entrada

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 *

Page 42: *(+num) Expr Expr Op Expr Expr (Expr) Expr - Expr Expr num Op + Op - Op * Pilha Buffer com string de entrada

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 *

Page 43: *(+num) Expr Expr Op Expr Expr (Expr) Expr - Expr Expr num Op + Op - Op * Pilha Buffer com string de entrada

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

Page 44: *(+num) Expr Expr Op Expr Expr (Expr) Expr - Expr Expr num Op + Op - Op * Pilha Buffer com string de entrada

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

Page 45: *(+num) Expr Expr Op Expr Expr (Expr) Expr - Expr Expr num Op + Op - Op * Pilha Buffer com string de entrada

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 *

Page 46: *(+num) Expr Expr Op Expr Expr (Expr) Expr - Expr Expr num Op + Op - Op * Pilha Buffer com string de entrada

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 *

Page 47: *(+num) Expr Expr Op Expr Expr (Expr) Expr - Expr Expr num Op + Op - Op * Pilha Buffer com string de entrada

num

Expr

num

-

SHIFT

Conflitos

Utilizando o ShiftExpr Expr Op Expr

Expr Expr - Expr

Expr (Expr)

Expr Expr -

Expr num

Op +

Op -

Op *

Page 48: *(+num) Expr Expr Op Expr Expr (Expr) Expr - Expr Expr num Op + Op - Op * Pilha Buffer com string de entrada

Expr

num

-

SHIFT

num

Utilizando o ShiftExpr Expr Op Expr

Expr Expr - Expr

Expr (Expr)

Expr Expr -

Expr num

Op +

Op -

Op *

Conflitos

Page 49: *(+num) Expr Expr Op Expr Expr (Expr) Expr - Expr Expr num Op + Op - Op * Pilha Buffer com string de entrada

Expr

num

-

REDUCE

Expr

num

Conflitos

Utilizando o ShiftExpr Expr Op Expr

Expr Expr - Expr

Expr (Expr)

Expr Expr -

Expr num

Op +

Op -

Op *

Page 50: *(+num) Expr Expr Op Expr Expr (Expr) Expr - Expr Expr num Op + Op - Op * Pilha Buffer com string de entrada

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 *

Page 51: *(+num) Expr Expr Op Expr Expr (Expr) Expr - Expr Expr num Op + Op - Op * Pilha Buffer com string de entrada

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 *