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 – Pascal e Java – Linguagens funcionais • Efeitos colaterais • Um programa é um comando BNF • http://www.cin.ufpe.br/~in1007/linguage ns/Imperativa1/imperativa1.html Programa Exemplo 1 { var a = 3; write(a); { var a = 2, var b = 5; write(a); write(b+a) }; write(a) } = 3 2 7 3 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") } = 2 3 = valores de entrada diferentes 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/lingu agens/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