Dúvida da lista 01

9 views
Skip to first unread message

Pedro Lopes

unread,
Sep 7, 2025, 4:53:48 PMSep 7
to [CEFET-MG]: Linguagens de Programação (DECOM009)
Prezado Andrei. Tudo bem?

Estava fazendo a lista e me surgiu uma dúvida: em Prolog, a recursividade à esquerda não é permitida. Isso não alteraria a ordem de precedência da minha gramática? Imagino que a recursividade à esquerda aumentará minha árvore à esquerda. Garantindo, assim, a ordem de precedência à esquerda das minhas operações. Essa regra de recursividade somente à direita do Prolog não atrapalha a ordem de precedência das minhas operações?

Desde já, agradeço!

Andrei Alvares

unread,
Sep 8, 2025, 9:45:28 AMSep 8
to Pedro Lopes, [CEFET-MG]: Linguagens de Programação (DECOM009)
Ei Pedro,

  Sim, com certeza, você tem razão. Como a gente teve que trocar a recursão à esquerda por recursão à direita, por ser não implementável em Prolog, isso sim afeta a estrutura da gramática. Para as operações de soma e multiplicação, o resultado da operação não muda se fizer fora de ordem, mas o caso da subtração sim (que discutimos em sala). Por exemplo, para a expressão -1 - -3 - -5 a gramática em Prolog daria o resultado errado (-3 ao invés de 7). Repare que troquei a operação de '+' por '-' na gramática em Prolog abaixo para demonstrar esse ponto.

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).


 E executando em Prolog:

?- 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.
Reply all
Reply to author
Forward
0 new messages