Ybadoo - Soluções em Software Livre
Tutoriais
Compiladores

Apresente a Análise de Precedência de Operadores, da entrada x * (x + (x ^ x) * x) sobre a gramática a seguir.

G = ({S, T, P, F}, {+, *, ^, (, ), x}, P, S)
P = {SS+T | T
TT*P | P
PP^F | F
F → (S) | x}

 

Tabela de precedência de operadores da gramática G
 +*^()x$
+><<<><>
*>><<><>
^>><<><>
(<<<<=< 
)>>> > >
x>>> > >
$<<<< <aceita
Movimentos do analisador de precedência de operadores para x * (x + (x ^ x) * x)
PilhaRelaçãoEntradaAçãoHandle
$<x * (x + (x ^ x) * x) $empilha x 
$ x>* (x + (x ^ x) * x) $reduzF → x
$ S<* (x + (x ^ x) * x) $empilha * 
$ S *<(x + (x ^ x) * x) $empilha ( 
$ S * (<x + (x ^ x) * x) $empilha x 
$ S * ( x>+ (x ^ x) * x) $reduzF → x
$ S * ( S<+ (x ^ x) * x) $empilha + 
$ S * ( S +<(x ^ x) * x) $empilha ( 
$ S * ( S + (<x ^ x) * x) $empilha x 
$ S * ( S + ( x>^ x) * x) $reduzF → x
$ S * ( S + ( S<^ x) * x) $empilha ^ 
$ S * ( S + ( S ^<x) * x) $empilha x 
$ S * ( S + ( S ^ x>) * x) $reduzF → x
$ S * ( S + ( S ^ S>) * x) $reduzPP^F
$ S * ( S + ( S=) * x) $empilha ) 
$ S * ( S + ( S )>* x) $reduzF → (S)
$ S * ( S + S<* x) $empilha * 
$ S * ( S + S *<x) $empilha x 
$ S * ( S + S * x>) $reduzF → x
$ S * ( S + S * S>) $reduzTT*P
$ S * ( S + S>) $reduzSS+T
$ S * ( S=) $empilha ) 
$ S * ( S )>$reduzF → (S)
$ S * S>$reduzTT*P
$ Saceita$