110 likes | 241 Views
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:
E N D
Paradigmas de Linguagens de ProgramaçãoBNF e Interpretador daLinguagem 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: • 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
BNF • http://www.cin.ufpe.br/~in1007/linguagens/Imperativa2/imperativa2.html • Novo comando: ChamadaProcedimento • Nova declaração: DecProcedimento
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!
Projeto e Implementação do Interpretador • http://www.cin.ufpe.br/~in1007/linguagens/Imperativa2/imperativa2.html • A execução de comandos retorna um contexto derivado do que é recebido como argumento • Modelo de projeto • Partes do código
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;