exp(W) --> mulexp(W1), ['-'], exp(W2), { W is W1 - W2 }.
exp(W) --> mulexp(W).
mulexp(W) --> rootexp(W1), ['*'], mulexp(W2), { W is W1 * W2 }.
mulexp(W) --> rootexp(W).
rootexp(W) --> ['('], exp(W), [')'].
rootexp(W) --> num(W).
num(X, [X|L], L) :- number(X).
?- exp(R, [-1,-,-3,-,-5], []).
R = -3 .
Portanto, a solução que eu dei, de simplesmente trocar a recursão à esquerda por recursão à direita não é uma solução válida. Isso foi usado apenas como um recurso didático para não aprofundar tanto no tema. Vocês vão ver melhor como resolver esse problema (que não é trivial) na disciplina de Compiladores.
[]z, Andrei
Desde já, agradeço!--
Você recebeu essa mensagem porque está inscrito no grupo "[CEFET-MG]: Linguagens de Programação (DECOM009)" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para decom009+u...@googlegroups.com.
Para ver esta conversa, acesse https://groups.google.com/d/msgid/decom009/d8ec18c6-529a-4c2a-8e88-2043780ef73an%40googlegroups.com.