Paradigmas de Linguagens de Programação BNF e Interpretador da Linguagem Imperativa 1 Augusto Sampaio e Paulo Borba Centro de Informática Universidade Federal de Pernambuco
Visão Geral Estende a linguagem de expressões 1 com variáveis comando de atribuição comandos de entrada e saída controle de fluxo
Visão Geral Comandos versus Expressões Efeitos colaterais Pascal e Java Linguagens funcionais Efeitos colaterais Um programa é um comando
BNF http://www.cin.ufpe.br/~in1007/linguagens/Imperativa1/imperativa1.html
Programa Exemplo 1 { var a = 3; write(a); { var a = 2, var b = 5; write(b+a) }; write(a) } = 3 2 7 3
= valores de entrada diferentes Programa Exemplo 2 {var n = 0, var m = 0; read(n); read(m); if (m == n) then write("valores de entrada iguais") else write("valores de entrada diferentes") } = valores de entrada diferentes = 2 3
= Hello World Hello World Hello World Programa Exemplo 3 { var i = 0; while not (i == 3) do i := i + 1; write("Hello World") } = Hello World Hello World Hello World
Ambiente do Interpretador O ambiente inclui três componentes: uma pilha de mapeamentos de identificadores em valores (memória principal) lista de valores de entrada (teclado, socket, etc.) lista de valores de saída (monitor, impressora, etc.)
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/Imperativa1/imperativa1.html A execução de comandos retorna um ambiente derivado do que é recebido como argumento Modelo de projeto Partes do código
Exercícios Estenda a Linguagem Imperativa 1 com os seguintes recursos: declaração de variável sem inicialização comando switch de Java comando for de Java blocos, iniciados por “{“ e terminados por “}”, sem obrigar a declaração de variáveis
Exercícios Estenda a Linguagem Imperativa 1 com os seguintes recursos: comando “break” de Java (interrompe e finaliza a execução de um “while”) comando “continue” de Java (interrompe e reinicia a execução de um “while”) Por simplicidade, inicialmente considere que não há declarações de variáveis locais