Paradigmas de Linguagens de Programação BNF e Interpretador da Linguagem Imperativa 2

Preview:

DESCRIPTION

Paradigmas de Linguagens de Programação BNF e Interpretador da Linguagem Imperativa 2. Augusto Sampaio e Paulo Borba Centro de Informática Universidade Federal de Pernambuco. Visão Geral. Estende a linguagem imperativa 1 com declarações e chamadas de procedimentos: - PowerPoint PPT Presentation

Citation preview

Paradigmas de Linguagens de Programação

BNF e Interpretador daLinguagem Imperativa 2

Augusto Sampaio e Paulo BorbaCentro de Informática

Universidade Federal de Pernambuco

Visão Geral

• Estende a linguagem imperativa 1 com declarações e chamadas de procedimentos:– procedimentos podem ser recursivos e

parametrizados – procedimentos não são valores– procedimentos podem ser declarados

em qualquer parte do programa

• Um programa é um comando

Programa Exemplo 1

{ var a = 0 , proc incA () { a := a + 1 }; call incA(); call incA(); write(a)}

= 2

Programa Exemplo 2{ var b = 3, proc escreveRecursivo (int a) { if (not (a == 0)) then { var x = 0; x := a - 1; write("Ola"); call escreveRecursivo(x) } else skip }; call escreveRecursivo(b)}

= Ola Ola Ola

Programa Exemplo 3{ var x = 0, proc p (int y) {x := x + y}; { var x = 1; call p(3); write(x) }; call p(4); write(x)}

= 4 4

Ambiente do Interpretador

• O ambiente inclui quatro componentes: – uma pilha de mapeamentos de

identificadores em valores (memória principal)

– duas listas de valores (entrada e saída)– uma pilha de mapeamentos de

identificadores em procedimentos (declarações)

Ambiente do Interpretador

O ambiente pode ser modificado por atribuições e por declarações

de variáveis!

Características do Interpretador

• Escopo dinâmico para variáveis e procedimentos

• Passagem de parâmetros por valor• Avaliação de argumentos da

esquerda para à direita

Exercícios

• Estenda a Linguagem Imperativa 2 com os seguintes recursos:– procedimentos com parâmetros

opcionais proc Id(ListaIdValor) = Comando – procedimentos que retornam valores proc Id(ListaId) return Id = Comando

call Id(ListaExpressao) return Id;