Ybadoo - Soluções em Software Livre
Tutoriais
Compiladores

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

G = ({A, B, C, D, E}, {+, -, *, /, ^, (, ), x, y, z}, P, A)
P = {AA+B | A-B | B
BB*C | B/C | C
CC^D | D
D → (A) | E
E → x | y | z}

 

Tabela de precedência de operadores da gramática G
 +-*/^()xyz$
+>><<<<><<<>
->><<<<><<<>
*>>>><<><<<>
/>>>><<><<<>
^>>>><<><<<>
(<<<<<<=<<< 
)>>>>> >   >
x>>>>> >   >
y>>>>> >   >
z>>>>> >   >
$<<<<<< <<<aceita
Movimentos do analisador de precedência de operadores para ((x + y) ^ (z * y)) / (x - y)
PilhaRelaçãoEntradaAçãoHandle
$<((x + y) ^ (z * y)) / (x - y) $empilha ( 
$ (<(x + y) ^ (z * y)) / (x - y) $empilha ( 
$ ( (<x + y) ^ (z * y)) / (x - y) $empilha x 
$ ( ( x>+ y) ^ (z * y)) / (x - y) $reduzE → x
$ ( ( A<+ y) ^ (z * y)) / (x - y) $empilha + 
$ ( ( A +<y) ^ (z * y)) / (x - y) $empilha y 
$ ( ( A + y>) ^ (z * y)) / (x - y) $reduzE → y
$ ( ( A + A>) ^ (z * y)) / (x - y) $reduzAA+B
$ ( ( A=) ^ (z * y)) / (x - y) $empilha ) 
$ ( ( A )>^ (z * y)) / (x - y) $reduzD → (A)
$ ( A<^ (z * y)) / (x - y) $empilha ^ 
$ ( A ^<(z * y)) / (x - y) $empilha ( 
$ ( A ^ (<z * y)) / (x - y) $empilha z 
$ ( A ^ ( z>* y)) / (x - y) $reduzE → z
$ ( A ^ ( A<* y)) / (x - y) $empilha * 
$ ( A ^ ( A *<y)) / (x - y) $empilha y 
$ ( A ^ ( A * y>)) / (x - y) $reduzE → y
$ ( A ^ ( A * A>)) / (x - y) $reduzBB*C
$ ( A ^ ( A=)) / (x - y) $empilha ) 
$ ( A ^ ( A )>) / (x - y) $reduzD → (A)
$ ( A ^ A>) / (x - y) $reduzCC^D
$ ( A=) / (x - y) $empilha ) 
$ ( A )>/ (x - y) $reduzD → (A)
$ A</ (x - y) $empilha / 
$ A /<(x - y) $empilha ( 
$ A / (<x - y) $empilha x 
$ A / ( x>- y) $reduzE → x
$ A / ( A<- y) $empilha - 
$ A / ( A -<y) $empilha y 
$ A / ( A - y>) $reduzE → y
$ A / ( A - A>) $reduzAA-B
$ A / ( A=) $empilha ) 
$ A / ( A )>$reduzD → (A)
$ A / A>$reduzBB/C
$ Aaceita$