Ybadoo - Soluções em Software Livre
Tutoriais
Compiladores

Apresente a Análise de Precedência de Operadores, da entrada .not.(w.ne.x.or.y.le.z).and.x.lt.z.or..not.y.eq.w sobre a gramática a seguir.

G = ({A, B, C, D, E}, {.or., .and., .not., .eq., .ne., .lt., .le., .gt., .ge., (, ), w, x, y, z}, P, A)
P = {AA.or.B | B
BB.and.C | C
C → .not.D | D
D → (A) | E.eq.E | E.eq.E | E.ne.E | E.lt.E | E.le.E | E.gt.E | E.ge.E
E → w | x | y | z }
Tabela de precedência de operadores da gramática G
 .or..and..not..eq..ne..lt..le..gt..ge.()wxyz$
.or.><<<<<<<<<><<<<>
.and.>><<<<<<<<><<<<>
.not.>>><<<<<<<><<<<>
.eq.>>>>>>>>><><<<<>
.ne.>>>>>>>>><><<<<>
.lt.>>>>>>>>><><<<<>
.le.>>>>>>>>><><<<<>
.gt.>>>>>>>>><><<<<>
.ge.>>>>>>>>><><<<<>
(<<<<<<<<<<=<<<< 
)>>>>>>>>> >    >
w>>>>>>>>> >    >
x>>>>>>>>> >    >
y>>>>>>>>> >    >
z>>>>>>>>> >    >
$<<<<<<<<<< <<<<aceita
Movimentos do analisador de precedência de operadores para .not.(w.ne.x.or.y.le.z).and.x.lt.z.or..not.y.eq.w
PilhaRelaçãoEntradaAçãoHandle
$<.not.(w.ne.x.or.y.le.z).and.x.lt.z.or..not.y.eq.w $empilha .not. 
$ .not.<(w.ne.x.or.y.le.z).and.x.lt.z.or..not.y.eq.w $empilha ( 
$ .not.(<w.ne.x.or.y.le.z).and.x.lt.z.or..not.y.eq.w $empilha w 
$ .not.(w>.ne.x.or.y.le.z).and.x.lt.z.or..not.y.eq.w $reduzE → w
$ .not.(A<.ne.x.or.y.le.z).and.x.lt.z.or..not.y.eq.w $empilha .ne. 
$ .not.(A.ne.<x.or.y.le.z).and.x.lt.z.or..not.y.eq.w $empilha x 
$ .not.(A.ne.x>.or.y.le.z).and.x.lt.z.or..not.y.eq.w $reduzE → x
$ .not.(A.ne.A>.or.y.le.z).and.x.lt.z.or..not.y.eq.w $reduzDE.ne.E
$ .not.(A<.or.y.le.z).and.x.lt.z.or..not.y.eq.w $empilha .or. 
$ .not.(A.or.<y.le.z).and.x.lt.z.or..not.y.eq.w $empilha y 
$ .not.(A.or.y>.le.z).and.x.lt.z.or..not.y.eq.w $reduzE → y
$ .not.(A.or.A<.le.z).and.x.lt.z.or..not.y.eq.w $empilha .le. 
$ .not.(A.or.A.le.<z).and.x.lt.z.or..not.y.eq.w $empilha z 
$ .not.(A.or.A.le.z>).and.x.lt.z.or..not.y.eq.w $reduzE → z
$ .not.(A.or.A.le.A>).and.x.lt.z.or..not.y.eq.w $reduzDE.le.E
$ .not.(A.or.A>).and.x.lt.z.or..not.y.eq.w $reduzAA.or.B
$ .not.(A=).and.x.lt.z.or..not.y.eq.w $empilha ) 
$ .not.(A)>.and.x.lt.z.or..not.y.eq.w $reduzD → (A)
$ .not.A>.and.x.lt.z.or..not.y.eq.w $reduzC → .not.D
$ A<.and.x.lt.z.or..not.y.eq.w $empilha .and. 
$ A.and.<x.lt.z.or..not.y.eq.w $empilha x 
$ A.and.x>.lt.z.or..not.y.eq.w $reduzE → x
$ A.and.A<.lt.z.or..not.y.eq.w $empilha .lt. 
$ A.and.A.lt.<z.or..not.y.eq.w $empilha .lt. 
$ A.and.A.lt.z>.or..not.y.eq.w $reduzE → z
$ A.and.A.lt.A>.or..not.y.eq.w $reduzDE.lt.E
$ A.and.A>.or..not.y.eq.w $reduzBB.and.C
$ A<.or..not.y.eq.w $empilha .or. 
$ A.or.<.not.y.eq.w $empilha .not. 
$ A.or..not.<y.eq.w $empilha y 
$ A.or..not.y>.eq.w $reduzE → y
$ A.or..not.A<.eq.w $empilha .eq. 
$ A.or..not.A.eq.<w $empilha w 
$ A.or..not.A.eq.w>$reduzE → w
$ A.or..not.A.eq.A>$reduzDE.eq.E
$ A.or..not.A>$reduzC → .not.D
$ A.or.A>$reduzAA.or.B
$ Aaceita$