*(+num) Expr Expr Op Expr Expr (Expr) Expr - Expr Expr num Op + Op - Op * Pilha Buffer com string de...
Transcript of *(+num) Expr Expr Op Expr Expr (Expr) Expr - Expr Expr num Op + Op - Op * Pilha Buffer com string de...
* ( + 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 *