Implementação de subprogramas

Tamanho: px
Começar a partir da página:

Download "Implementação de subprogramas"

Transcrição

1 Implementação de subprogramas Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá cba Este trabalho está licenciado com uma Licença Creative Commons - Atribuição-CompartilhaIgual 4.0 Internacional.

2 Conteúdo A semântica geral das chamadas e retornos Implementação de subprogramas simples Implementação de subprogramas com variáveis locais dinâmicas na pilha Subprogramas aninhados Blocos Implementação escopo dinâmico

3 A semântica geral das chamadas e retornos 3/54

4 A semântica geral das chamadas e retornos As operações de chamada e retorno de subprogramas são denominadas conjuntamente de ligação de subprograma A implementação de subprogramas deve ser baseada na semântica da ligação de subprogramas 4/54

5 A semântica geral das chamadas e retornos Ações associadas com as chamadas de subprogramas Passagem de parâmetros Alocação e vinculação das variáveis locais dinâmicas na pilha Salvar o estado de execução do subprograma chamador Transferência do controle para o subprograma chamado Mecanismos de acesso a variáveis não locais (no caso de subprogramas aninhados) 5/54

6 A semântica geral das chamadas e retornos Ações associadas com os retornos de subprogramas Retorno dos parâmetros out e inout Desalocação das variáveis locais Restauração do estado da execução Retorno do controle ao subprograma chamador 6/54

7 Implementação de subprogramas simples 7/54

8 Implementação de subprogramas simples Subprogramas simples Subprogramas não podem ser aninhados Todas as variáveis locais são estáticas 8/54

9 Implementação de subprogramas simples Semântica da chamada requer as ações 1. Salvar o estado da unidade de programa corrente 2. Computar e passar os parâmetros 3. Passar o endereço de retorno ao subprograma chamado 4. Transferir o controle ao subprograma chamado 9/54

10 Implementação de subprogramas simples Semântica do retorno requer as ações 1. Copiar os valores dos parâmetros formais inout (passagem por cópia) e out para os parâmetros reais 2. Copiar o valor de retorno (no caso de função) 3. Restaurar o estado de execução do chamador 4. Transferir o controle de volta ao chamador 10/54

11 Implementação de subprogramas simples Como estas ações são distribuídas entre o subprograma chamador e o subprograma chamado? 11/54

12 Implementação de subprogramas simples Memória requerida para a chamada e retorno Estado do chamador Parâmetros Endereço de retorno Valor de retorno para funções Valores temporários utilizados no código do subprograma 12/54

13 Implementação de subprogramas simples As ações do subprograma chamado podem ocorrer No início da execução (prólogo) No final da execução (epílogo) 13/54

14 Implementação de subprogramas simples Um subprograma simples consiste de duas partes de tamanhos fixos Código do subprograma As variáveis locais e os dados (não código, listados anteriormente) 14/54

15 Implementação de subprogramas simples O formato (layout) da parte não código do subprograma é chamado de registro de ativação Uma instância do registro de ativação é um exemplo concreto do registro de ativação Como as linguagens com subprogramas simples não suportam recursão só pode haver uma instância do registro de ativação de cada subprograma Como o registro de ativação tem tamanho fixo, pode ser alocado estaticamente 15/54

16 Implementação de subprogramas simples Variáveis locais Parâmetros Endereço de retorno Figura 10.1 Um registro de ativação para subprogramas simples. 16/54

17 Implementação de subprogramas simples Dados MAIN A B C Variáveis locais Variáveis locais Parâmetros Endereço de retorno Variáveis locais Parâmetros Endereço de retorno Variáveis locais Parâmetros Endereço de retorno MAIN Código A B Figura 10.2 Um registro de ativação para subprogramas simples. C 17/54

18 Implementação de subprogramas com variáveis locais dinâmicas na pilha 18/54

19 Implementação de subprogramas com variáveis locais dinâmicas na pilha Registros de ativação mais complexos O compilador precisa gerar código para alocação e desalocação das variáveis locais Suporte a recursão (mais de uma instância de registro de ativação para um subprograma) 19/54

20 Implementação de subprogramas com variáveis locais dinâmicas na pilha O formato de registro de ativação é conhecido em tempo de compilação (na maioria das linguagens) O tamanho do registro de ativação pode variar (se existirem arranjos dinâmicos na pilha, por exemplo) Os registros de ativação precisam ser criados dinamicamente 20/54

21 Implementação de subprogramas com variáveis locais dinâmicas na pilha Variáveis locais Parâmetros Topo da Pilha Endereço de retorno Figura 10.3 Um registro de ativação típico para uma linguagem com variáveis locais dinâmicas da pilha. 21/54

22 Implementação de subprogramas com variáveis locais dinâmicas na pilha O endereço de retorno geralmente consiste em um ponteiro para a instrução que segue a chamada do subprograma O vínculo dinâmico aponta para a base da instância do registro de ativação do chamador Os parâmetros são valores ou endereços dados pelo chamador As variáveis locais são alocadas (e possivelmente inicializadas) no subprograma chamado 22/54

23 Implementação de subprogramas com variáveis locais dinâmicas na pilha void sub(float total, int part){ int list[5]; float sum;... } Parâmetro Parâmetro Endereço de retorno sum list [4] list [3] list [2] list [1] list [0] part total Figura 10.4 O registro de ativação para a função sub. 23/54

24 Implementação de subprogramas com variáveis locais dinâmicas na pilha Ativar um subprograma requer a criação dinâmica de um registro de ativação O registro de ativação é criado na pilha de execução (run-time stack) O ponteiro de ambiente (EP - Enviromnet Pointer) aponta para a base do registro de ativação da unidade de programa que está executando 24/54

25 Implementação de subprogramas com variáveis locais dinâmicas na pilha O EP é mantido pelo sistema O EP é salvo como vínculo dinâmico do novo registro de ativação quando um subprograma é chamado O EP é alterado para apontar para a base do novo registro de ativação No retorno, o topo da pilha é alterado para EP - 1, e o EP é alterado para o vínculo dinâmico do registro de ativação do subprograma que está terminado O EP é usado como base do endereçamento por deslocamento dos dados na instância do registro de ativação 25/54

26 Implementação de subprogramas com variáveis locais dinâmicas na pilha Ações do subprograma chamador 1. Criar um registro de ativação 2. Salvar o estado da unidade de programa corrente 3. Computar e passar os parâmetros 4. Passar o endereço de retorno ao subprograma chamado 5. Transferir o controle ao subprograma chamado 26/54

27 Implementação de subprogramas com variáveis locais dinâmicas na pilha Ações no prólogo do subprograma chamado 1. Salvar o antigo EP com vínculo dinâmico, e atualizar o seu valor 2. Alocar as variáveis locais 27/54

28 Implementação de subprogramas com variáveis locais dinâmicas na pilha Ações no epílogo do subprograma chamado 1. Copiar os valores dos parâmetros formais inout (passagem por cópia) e out para os parâmetros reais 2. Copiar o valor de retorno (no caso de função) 3. Atualizar o topo da pilha e restaurar o EP para o valor do antigo vinculo dinâmico 4. Restaurar o estado de execução do chamador 5. Transferir o controle de volta ao chamador 28/54

29 Exemplo sem recursão void fun1(float r) { int s, t;... // <- 1 fun2(s); } void fun2(int x) { int y;... // <- 2 fun3(y); } void fun3(int q) {... // <- 3 } void main() { float p;... fun1(p); } IRA para fun1 IRA para main Parâmetro Retorno (para main) Topo t s r p IRA para fun2 IRA para fun1 IRA para main Parâmetro Retorno (para fun1) Parâmetro Retorno (para main) no Ponto 1 no Ponto 2 no Ponto 3 y x t s r p Topo IRA = instância de registro de ativação Figure 10.5 Conteúdo da pilha para três pontos em um programa. IRA para fun3 IRA para fun2 IRA para fun1 IRA para main Parâmetro Retorno (para fun2) Parâmetro Retorno (para fun1) Parâmetro Retorno (para main) q y x t s r p Topo 29/54

30 Implementação subprogramas com variáveis locais dinâmicas na pilha A coleção de vínculos dinâmicos na pilha em um determinado momento é chamado de cadeia dinâmica ou cadeia de chamadas Referência as variáveis locais podem ser representadas por deslocamentos a partir do início do registro de ativação, cujo endereço é armazenado em EP Este é o deslocamento local (local_offset) O deslocamento local pode ser determinado em tempo de compilação 30/54

31 Exemplo com recursão int fat(int n) { // <- 1 if (n <= 1) { return 1; } else { return n * fat(n - 1); } // <- 2 } void main() { int value; value = fat(3); // <- 3 } Valor funcional Parâmetro n Endereço de retorno Figura 10.6 O registro de ativação para factorial. 31/54

32 Exemplo com recursão int fat(int n) { // <- 1 if (n <= 1) { return 1; } else { return n * fat(n - 1); } // <- 2 } void main() { int value; value = fat(3); // <- 3 } Primeiro IRA para factorial IRA para main Segundo IRA para factorial Primeiro IRA para factorial IRA para main Valor funcional Parâmetro Retorno (para main) Primeira chamada Valor funcional Parâmetro Retorno (para factorial) Valor funcional Parâmetro Retorno (para main) Segunda chamada? 3 n Topo? valor? 2? 3? n n Topo valor Terceiro IRA para factorial Segundo IRA para factorial Primeiro IRA para factorial IRA para main Valor funcional Parâmetro Topo? 1 n Retorno (para factorial) Valor funcional Parâmetro? 2 n Retorno (para factorial) Valor funcional Parâmetro? 3 n Retorno (para main)? valor Terceira chamada IRA = instância de registro de avaliação Figura 10.7 Conteúdo da pilha na posição 1 de factorial. 32/54

33 Exemplo com recursão int fat(int n) { // <- 1 if (n <= 1) { return 1; } else { return n * fat(n - 1); } // <- 2 } void main() { int value; value = fat(3); // <- 3 } Terceiro IRA para factorial Segundo IRA para factorial Primeiro IRA para factorial IRA para main Primeiro IRA para factorial IRA para main Valor funcional Parâmetro Valor funcional Parâmetro Retorno (para factorial) Valor funcional Parâmetro Retorno (para main) 1 n Retorno (para factorial)? 2 n? 3 n Na posição 2 em factorial terceira chamada completada Valor funcional Parâmetro Retorno (para main) Na posição 2 em factorial primeira chamada completada 6 3 1? n Topo valor Topo? valor Segundo IRA para factorial Primeiro IRA para factorial IRA para main IRA para main Valor funcional Parâmetro Retorno (para factorial) Valor funcional Parâmetro Retorno (para main) Na posição 2 em factorial segunda chamada completada Na posição 3 em main resultados finais 2 2? 3? 6 n n Topo valor Topo valor IRA = instância de registro de avaliação Figura 10.8 Conteúdo da pilha durante a execução de main e factorial. 33/54

34 Subprogramas aninhados 34/54

35 Subprogramas aninhados Algumas linguagens com escopo estático permitem subprogramas aninhados (Fortran 95, Ada, Python, Javascript, Ruby, Lua) Todas as variáveis não locais que podem ser acessadas estão em algum registro de ativação na pilha 35/54

36 Subprogramas aninhados Processo para encontrar um referência não local Encontrar o registro de ativação correto Determinar o deslocamento dentro do registro de ativação A forma mais comum de implementação é o encadeamento estático 36/54

37 Subprogramas aninhados Um vínculo estático aponta para a base de uma instância do registro de ativação de uma ativação do pai estático Uma cadeia estática é uma cadeia de vínculos estáticos que conecta certas instâncias de registros de ativação A cadeia estática conecta todos os ancestrais estáticos de um subprograma em execução A cadeia estática é usado para implementar acesso as variáveis não locais 37/54

38 Subprogramas aninhados Encontrar a instância do registro de ativação correta é direto, basta seguir os vínculos. Mas pode ser ainda mais simples static_depth é um inteiro associado com o escopo estático cujo valor é a profundidade de aninhamento deste escopo O chain_offset ou nesting_depth de uma referência não local é a diferença entre o static_depth do subprograma que faz a referência e do subprograma onde a variável referenciada foi declarada Uma referência a uma variável pode ser representada por um par (chain_offset, local_offset), sendo local_offset o deslocamento no registro de ativação da variável referenciada 38/54

39 Exemplo procedure Main is X : Integer; procedure Bigsub is A, B, C : Integer; procedure Sub1 is A, D : Integer; begin -- of Sub1 A := B + C; -- < end; -- of Sub1 procedure Sub2(X : Integer) is B, E : Integer; procedure Sub3 is C, E : Integer; begin -- of Sub3 Sub1; E := B + A; -- < end; -- of Sub3 begin -- of Sub2 Sub3; A := D + E; -- < end; -- of Sub2 begin -- of Bigsub Sub2(7); end; -- of Bigsub begin Bigsub; end; -- of Main Qual é o valor (chain_offset, local_offset) da referência a variável A nos pontos 1, 2 e 3? Ponto 1 Variável local (0, 3) Ponto 2 Variável não local (bigsub) (2, 3) Ponto 3 Variável não local (bigsub) (1, 3) 39/54

40 IRA para Sub1 IRA para Sub3 IRA para Sub2 IRA para Bigsub IRA para Main_2 D Top A Ligação estática Retorno (para Sub3) E C Ligação estática Retorno (para Sub2) E B Parâmetro X Ligação estática Retorno (para Bigsub) C B A Ligação estática Retorno (para Main_2) X IRA = instância de registro de ativação Figura 10.9 Conteúdo da pilha na posição 1 do programa. 40/54

41 Subprogramas aninhados Como a cadeia estática é mantida? A cadeia estática precisa ser modificada a cada chamada ou retorno de subprograma O retorno é trivial A chamada é mais complexa 41/54

42 Subprogramas aninhados Embora o escopo do pai seja facilmente determinado em tempo de compilação, a mais recente instância do registro de ativação do pai precisa ser encontrada a cada chamada Este processo pode ser feito com dois métodos Buscar pela cadeia dinâmica Tratar as declarações e referências de subprogramas como as de variáveis 42/54

43 Subprogramas aninhados Críticas ao método de encadeamento estático Acesso a uma referência não local pode ser lento se a profundidade do aninhamento for grande Em sistemas de tempo crítico, é difícil determinar o custo de acesso a variáveis não locais 43/54

44 Blocos 44/54

45 Blocos Algumas linguagens (incluindo C), permitem a criação de escopos definidos pelos usuários, chamados blocos { } int temp; temp = list[upper]; list[upper] = list[lower]; list[lower] = temp; 45/54

46 Blocos Blocos podem ser implementados de duas maneiras Usando encadeamento estáticos (blocos são tratados como subprogramas sem parâmetros) Como o valor máximo de memória requerido pelas variáveis de bloco podem ser determinados em tempo de compilação, esta memória poder ser alocada na pilha e as variáveis de bloco são tratadas como variáveis locais 46/54

47 Blocos void main() { int x, y, z; while (...) { int a, b, c;... while (...){ int d, e;... } } while (...) { int f, g;... }... } Variáveis de bloco Variáveis locais e d c b e g a e f z y x Instância de registro de ativação para main Figura Armazenamento de variáveis de blocos quando os blocos não são tratados como procedimentos sem parâmetros. 47/54

48 Implementação escopo dinâmico 48/54

49 Implementação escopo dinâmico Existem duas maneiras para implementar acesso a variáveis não locais em linguagens com escopo dinâmico Acesso profundo Acesso raso 49/54

50 Implementação escopo dinâmico Acesso profundo As referências não locais são encontradas seguindo os registros de ativação na cadeia dinâmica O tamanho da cadeia não pode ser estaticamente determinada Os nomes das variáveis devem ser armazenadas nos registros de ativação 50/54

51 Implementação escopo dinâmico void sub3() { int x, z; x = u + v;... } void sub2() { int w, x;... } void sub1() { int v, w;... } void main() { int v, u;... } IRA para sub3 IRA para sub2 IRA para sub1 IRA para sub1 IRA para main Retorno (para sub2) Retorno (para sub1) Retorno (para sub1) Retorno (para main) IRA = instância de registro de ativação Figura Conteúdo da pilha para um programa de escopo dinâmico. z x x w w v w v u v 51/54

52 Implementação escopo dinâmico Acesso raso As variáveis locais ficam em um lugar central (não ficam no registro de ativação) Uma pilha para cada nome de variável 52/54

53 Implementação escopo dinâmico void sub3() { int x, z; x = u + v;... } void sub2() { int w, x;... } void sub1() { int v, w;... } void main() { int v, u;... } Chamadas: main, sub1, sub1, sub2, sub3. sub1 sub2 sub1 sub3 sub1 main main sub2 sub3 sub1 u v x z w (Os nomes nas células da pilha indicam as unidades de programa da declaração da variável.) Figura Um método de uso do acesso raso para implementar escopo dinâmico. 53/54

54 Referências Robert Sebesta, Concepts of programming languages, 9ª edição. Capítulo /54

Implementando subprogramas

Implementando subprogramas Implementando subprogramas Linguagens de Programação Marco A L Barbosa cba Este trabalho está licenciado com uma Licença Creative Commons - Atribuição-CompartilhaIgual 4.0 Internacional. http://github.com/malbarbo/na-lp-copl

Leia mais

Linguagens de Programação Aula 11

Linguagens de Programação Aula 11 Linguagens de Programação Aula 11 Celso Olivete Júnior [email protected] Na aula passada Uma definição de subprograma descreve as ações representadas pelo subprograma Subprogramas podem ser funções

Leia mais

Nomes, vinculações e escopos

Nomes, vinculações e escopos Nomes, vinculações e escopos Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá cba Este trabalho está licenciado com uma Licença Creative Commons - Atribuição-CompartilhaIgual

Leia mais

Nomes, vinculações e escopos

Nomes, vinculações e escopos Nomes, vinculações e escopos Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá cba Este trabalho está licenciado com uma Licença Creative Commons - Atribuição-CompartilhaIgual

Leia mais

Paradigmas de Linguagens de Programação. Subprogramas

Paradigmas de Linguagens de Programação. Subprogramas Cristiano Lehrer Características Gerais dos Cada subprograma tem um único ponto de entrada Toda unidade de programa chamadora é suspensa durante a execução do programa chamado, o que implica na existência

Leia mais

Compiladores. Gerência de Memória

Compiladores. Gerência de Memória Compiladores Gerência de Memória Cristiano Lehrer, M.Sc. Atividades do Compilador Arquivo de origem Arquivo de destino Análise Otimização Geração de Código Intermediário Geração de Código Final Síntese

Leia mais

Conceitos de Linguagens de Programação

Conceitos de Linguagens de Programação Faculdade de Ciências e Tecnologia Departamento de Matemática e Computação Bacharelado em Ciência da Computação Conceitos de Linguagens de Programação Aula 06 ([email protected]) Aula 6 Subprogramas

Leia mais

Compiladores Ambiente de Execução

Compiladores Ambiente de Execução Compiladores Ambiente de Execução Fabio Mascarenhas 2015.2 http://www.dcc.ufrj.br/~fabiom/comp O Back-end Até agora vimos as fases do front-end do compilador: Análise Léxica Análise Sintática Análise Semântica

Leia mais

Compiladores Ambiente de Execução

Compiladores Ambiente de Execução Compiladores Ambiente de Execução Fabio Mascarenhas 2015.1 http://www.dcc.ufrj.br/~fabiom/comp O Back-end Até agora vimos as fases do front-end do compilador: Análise Léxica Análise Sintática Análise Semântica

Leia mais

Expressões e sentença de atribuição

Expressões e sentença de atribuição Expressões e sentença de atribuição Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá cba Este trabalho está licenciado com uma Licença Creative Commons - Atribuição-CompartilhaIgual

Leia mais

Capítulo 5. Nomes, Vinculações e Escopos

Capítulo 5. Nomes, Vinculações e Escopos Capítulo 5 Nomes, Vinculações e Escopos Tópicos do Capítulo 5 Introdução Nomes Variáveis O conceito de vinculação Escopo Escopo e tempo de vida Ambientes de referenciamento Constantes nomeadas Introdução

Leia mais

Linguagens de Programação. Nomes, Escopos e Vinculações (Bindings) Carlos Bazilio

Linguagens de Programação. Nomes, Escopos e Vinculações (Bindings) Carlos Bazilio Linguagens de Programação Nomes, Escopos e Vinculações (Bindings) Carlos Bazilio [email protected] http://www.ic.uff.br/~bazilio/cursos/lp Nomes Forma mais simples de abstração Um nome é um caracter

Leia mais

02. [Sebesta, 2000] Qual é o perigo potencial dos nomes que fazem distinção entre maiúsculas e minúsculas?

02. [Sebesta, 2000] Qual é o perigo potencial dos nomes que fazem distinção entre maiúsculas e minúsculas? 01. [Sebesta, 2000] Quais são as questões de projeto referentes a nomes? Nomes, Vinculações, Verificação de Tipos e Escopos 02. [Sebesta, 2000] Qual é o perigo potencial dos nomes que fazem distinção entre

Leia mais

Paradigmas de Linguagens de Programação. Nomes, Vinculações, Verificação de Tipos e Escopos

Paradigmas de Linguagens de Programação. Nomes, Vinculações, Verificação de Tipos e Escopos Nomes, Vinculações, Verificação de Tipos e Escopos Cristiano Lehrer Nomes (1/6) Um nome é uma string de caracteres usada para identificar alguma entidade de um programa. O termo identificador é utilizado

Leia mais

Nomes, vinculações e escopos

Nomes, vinculações e escopos Nomes, vinculações e escopos Linguagens de Programação Marco A L Barbosa cba Este trabalho está licenciado com uma Licença Creative Commons - Atribuição-CompartilhaIgual 4.0 Internacional. http://github.com/malbarbo/na-lp-copl

Leia mais

Ambientes de Execução

Ambientes de Execução Ambientes de Execução Organização da memória Ambientes totalmente estáticos, baseados em pilhas e totalmente dinâmicos Passagem de parâmetros Prof. Thiago A. S. Pardo 1 Ambientes de execução na estrutura

Leia mais

Ambientes de Execução

Ambientes de Execução Ambientes de execução na estrutura do compilador programa-fonte Ambientes de Execução Tabela de símbolos analisador léxico analisador sintático Organização da memória Ambientes totalmente estáticos, baseados

Leia mais

Compiladores. Análise Semântica

Compiladores. Análise Semântica Compiladores Análise Semântica Cristiano Lehrer, M.Sc. Atividades do Compilador Arquivo de origem Análise léxica Análise semântica Síntese Análise sintática Análise Gramáticas Estruturas internas Arquivo

Leia mais

Estruturas de controle no nível de sentença

Estruturas de controle no nível de sentença Estruturas de controle no nível de sentença Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá cba Este trabalho está licenciado com uma Licença Creative Commons

Leia mais

Capítulo 9. Subprogramas

Capítulo 9. Subprogramas Capítulo 9 Subprogramas Introdução Dois recursos fundamentais de abstração Abstração de processos Desde o início da história das linguagens de programação Abstração de dados Desde o início dos anos 1980

Leia mais

Nomes, Vinculações, Verificação de Tipos e Escopos. George Darmiton da Cunha Cavalcanti

Nomes, Vinculações, Verificação de Tipos e Escopos. George Darmiton da Cunha Cavalcanti Nomes, Vinculações, Verificação de Tipos e Escopos George Darmiton da Cunha Cavalcanti ([email protected]) Tópicos Introdução Nomes Variáveis O conceito de vinculação (binding) Verificação de tipos Tipificação

Leia mais

Linguagens de Programação Conceitos e Técnicas. Amarrações

Linguagens de Programação Conceitos e Técnicas. Amarrações Linguagens de Programação Conceitos e Técnicas Amarrações Conceituação Amarração (ou binding) é uma associação entre entidades de programação, tais como entre uma variável e seu valor ou entre um identificador

Leia mais

ALGORITMOS E ESRUTRA DE DADOS I. Ponteiros Passagem por Valor e Referência Alocação de Memória

ALGORITMOS E ESRUTRA DE DADOS I. Ponteiros Passagem por Valor e Referência Alocação de Memória ALGORITMOS E ESRUTRA DE DADOS I Ponteiros Passagem por Valor e Referência Alocação de Memória 2 Agenda Ponteiros Conceitos gerais O que é Ponteiro? Declaração de Ponteiros Operadores para Ponteiros Exemplos

Leia mais

SCC Capítulo 2 Recursão

SCC Capítulo 2 Recursão SCC-501 - Capítulo 2 João Luís Garcia Rosa 1 1 Departamento de Ciências de Computação Instituto de Ciências Matemáticas e de Computação Universidade de São Paulo - São Carlos http://www.icmc.usp.br/~joaoluis

Leia mais

Linguagens de Programação Nomes, Amarrações e Escopo

Linguagens de Programação Nomes, Amarrações e Escopo Linguagens de Programação Nomes, Amarrações e Escopo Andrei Rimsa Álvares Sumário Nomes Amarrações Escopo NOMES Linguagens de Programação Nomes Conceito mais amplo que variáveis Podem representar Variáveis

Leia mais

Suporte a programação orientada a objetos

Suporte a programação orientada a objetos Suporte a programação orientada a objetos Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá cba Este trabalho está licenciado com uma Licença Creative Commons

Leia mais

Capítulo 7. Expressões e Sentenças de Atribuição

Capítulo 7. Expressões e Sentenças de Atribuição Capítulo 7 Expressões e Sentenças de Atribuição Introdução Expressões são os meios fundamentais de especificar computações em uma linguagem de programação Para entender a avaliação de expressões, é necessário

Leia mais

Paradigmas de Programação

Paradigmas de Programação Paradigmas de Programação Aula 6 Nomes, Vinculações, Verificação de Tipos e Escopos Prof.: Edilberto M. Silva http://www.edilms.eti.br Prof. Edilberto Silva / edilms.eti.br Introdução As linguagens de

Leia mais

Rotinas, Modos e Tipos de Passagem de Parâmetros

Rotinas, Modos e Tipos de Passagem de Parâmetros Linguagens de Programação Rotinas, Modos e Tipos de Passagem de Parâmetros Carlos Bazilio [email protected] http://www.ic.uff.br/~bazilio/cursos/lp Chamada de Rotinas Rotina f Rotina g(w) g (k) Passagem

Leia mais

Tipos Abstratos de Dados. Estrutura de Dados

Tipos Abstratos de Dados. Estrutura de Dados Tipos Abstratos de Dados Tipo Abstrato de Dados ou TAD Idéia principal: desvincular o tipo de dado (valores e operações) de sua implementação: O que o tipo faz e não como ele faz! Vantagens da desvinculação:

Leia mais

Estrutura de dados 1. Ponteiros

Estrutura de dados 1. Ponteiros Estrutura de dados 1 Ponteiros Ponteiros Um ponteiro é um endereço de memória O valor de um ponteiro indica onde uma variável está armazenada Um ponteiro proporciona um modo de acesso a uma variável sem

Leia mais

Tipos Básicos. Operadores de Incremento e Decremento. Operador Sizeof. Estruturas de Dados Aula 2: Estruturas Estáticas

Tipos Básicos. Operadores de Incremento e Decremento. Operador Sizeof. Estruturas de Dados Aula 2: Estruturas Estáticas Tipos Básicos Quantos valores distintos podemos representar com o tipo char? Estruturas de Dados Aula 2: Estruturas Estáticas 03/03/2010 Operadores de Incremento e Decremento ++ e -- Incrementa ou decrementa

Leia mais

Universidade Federal de Goiás Bacharelado em Ciências da Computacão Compiladores

Universidade Federal de Goiás Bacharelado em Ciências da Computacão Compiladores Universidade Federal de Goiás Bacharelado em Ciências da Computacão Compiladores 2013-2 Compilador para a Linguagem Cafezinho Especificação dos trabalhos: T2 (Geração da Representação Intermediária e Análise

Leia mais

Ponteiros de Variáveis

Ponteiros de Variáveis Ponteiros de Variáveis C++ permite o armazenamento e a manipulação de valores de endereços de memória. Para cada tipo existente, há um tipo ponteirocapaz de armazenar endereços de memória em que existem

Leia mais

Ambiente de tempo de Execução Cap. 7

Ambiente de tempo de Execução Cap. 7 Ambiente de tempo de Execução Cap. 7 Introdução Subdivisão da memória usada pelo programa em tempo de execução Segmento de Código Segmento Estático (segmento de dados) Pilha Área de memória livre Heap

Leia mais

Revisão da Linguagem C Prof. Evandro L. L. Rodrigues

Revisão da Linguagem C Prof. Evandro L. L. Rodrigues SEL0433 Aplicação de Microprocessadores I Revisão da Linguagem C Prof. Evandro L. L. Rodrigues Estrutura de um programa C Diretivas de pré processamento Declaração de variáveis globais Declaração de protótipos

Leia mais

Linguagem de Programação e Compiladores

Linguagem de Programação e Compiladores Linguagem de Programação e Compiladores Fernando Antônio Asevedo Nóbrega Instituto de Ciências Matemáticas e de Computação USP SCC-206 Introdução à Compilação 24 de abril de 2012 1 / 20 Sumário 1 Introdução

Leia mais

Fundamentos de Sistemas Operacionais

Fundamentos de Sistemas Operacionais Fundamentos de Sistemas Operacionais Aula 7: Implementação de Processos e Threads Diego Passos Revisão Programação Concorrente e Multiprogramação SOs modernos permitem diversos processos em memória. Cada

Leia mais

DAS5102 Fundamentos da Estrutura da Informação

DAS5102 Fundamentos da Estrutura da Informação Ponteiros e Funções Funções ou sub-rotinas são parcelas de código que podem ser invocadas a partir do programa principal ou até mesmo por outras sub-rotinas. Elas têm como objetivo a execução de uma tarefa

Leia mais

PONTEIROS E LISTAS. Kalinka Regina Lucas Jaquie Castelo Branco

PONTEIROS E LISTAS. Kalinka Regina Lucas Jaquie Castelo Branco PONTEIROS E LISTAS Kalinka Regina Lucas Jaquie Castelo Branco [email protected] ALOCAÇÃO DINÂMICA DE MEMÓRIA Pode-se assumir que as variáveis declaradas na cláusula variável do pseudo-código do algoritmo

Leia mais

Linguagens de Programação 2 Amarrações

Linguagens de Programação 2 Amarrações Linguagens de Programação 2 Amarrações Vítor E. Silva Souza ([email protected]) http://www.inf.ufes.br/~vitorsouza Departamento de Informática Centro Tecnológico Universidade Federal do Espírito Santo

Leia mais

Algoritmos e estrutura de dados

Algoritmos e estrutura de dados Algoritmos e estrutura de dados Listas Marco A L Barbosa cba Este trabalho está licenciado com uma Licença Creative Commons - Atribuição-CompartilhaIgual 4.0 Internacional. Conteúdo Listas Listas encadeadas

Leia mais

Subprogramas. Linguagens de Programação. Marco A L Barbosa

Subprogramas. Linguagens de Programação. Marco A L Barbosa Subprogramas Linguagens de Programação Marco A L Barbosa cba Este trabalho está licenciado com uma Licença Creative Commons - Atribuição-CompartilhaIgual 4.0 Internacional. http://github.com/malbarbo/na-lp-copl

Leia mais

AULA 05: LINGUAGEM DE MONTAGEM: SUPORTE A PROCEDIMENTOS

AULA 05: LINGUAGEM DE MONTAGEM: SUPORTE A PROCEDIMENTOS ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES I AULA 05: Prof. Max Santana Rolemberg Farias [email protected] Colegiado de Engenharia de Computação O QUE SÃO PROCEDIMENTOS? Procedimentos são um conjunto

Leia mais

Paradigmas de Linguagens de Programação. Tipos de Dados

Paradigmas de Linguagens de Programação. Tipos de Dados Tipos de Dados Cristiano Lehrer Introdução (1/2) 1956: FORTRAN I 1983: ADA INTEGER, REAL, arrays. Usuário pode criar um único tipo para cada categoria de variáveis no espaço de problemas e deixar o sistema

Leia mais

Nomes, Amarração, Verificação de Tipos, e Escopo

Nomes, Amarração, Verificação de Tipos, e Escopo 5 Nomes, Amarração, Verificação de Tipos, e Escopo Concepts of Programming Languages, 5/e Robert W. Sebesta Agenda Objetivo desta aula: Introduzir os principais aspectos semânticos de variáveis Palavras-chave

Leia mais

Paradigmas de Linguagens de Programação. Suporte para Programação Orientada a Objeto

Paradigmas de Linguagens de Programação. Suporte para Programação Orientada a Objeto Suporte para Programação Orientada a Objeto Cristiano Lehrer Categoria das Linguagens que Suportam POO Suporte a POO acrescentado a uma linguagem já existente: C++ (também suporta programação procedural

Leia mais

Programação de Computadores II

Programação de Computadores II Programação de Computadores II 1. Programação Básica 2019.1 Slides adaptados do material de Karina Mochetti Problema, Algoritmo, Programa Um programa de computador é a implementação de um algoritmo para

Leia mais

Estruturas de Dados I

Estruturas de Dados I Estruturas de Dados I Rodrigo Porfírio da Silva Sacchi [email protected] 3410-2075 Aula 6: Listas Encadeadas e Alocação Dinâmica Listas Encadeadas e Alocação Dinâmica Alocação Seqüencial versus

Leia mais

Algoritmos e Programação. Linguagem C Procedimentos e. Eliane Pozzebon

Algoritmos e Programação. Linguagem C Procedimentos e. Eliane Pozzebon Algoritmos e Programação Linguagem C Procedimentos e Funções Eliane Pozzebon Procedimentos e Funções Procedimentos são estruturas que agrupam um conjunto de comandos, que são executados quando o procedimento

Leia mais

Ponteiros em C. Adriano Joaquim de Oliveira Cruz 21 de julho de Instituto de Matemática Departamento de Ciência da Computação UFRJ

Ponteiros em C. Adriano Joaquim de Oliveira Cruz 21 de julho de Instituto de Matemática Departamento de Ciência da Computação UFRJ Ponteiros em C Adriano Joaquim de Oliveira Cruz 21 de julho de 2017 Instituto de Matemática Departamento de Ciência da Computação UFRJ 1 Resumo da Seção Introdução Declaração Incrementando e Decrementando

Leia mais

Módulo 5 Vetores e Alocação Dinâmica

Módulo 5 Vetores e Alocação Dinâmica Estruturas de Dados Módulo 5 Vetores e Alocação Dinâmica 1/9/2005 (c) Dept. Informática - PUC-Rio 1 Referências Waldemar Celes, Renato Cerqueira, José Lucas Rangel, Introdução a Estruturas de Dados, Editora

Leia mais

Noções de sistemas de computação

Noções de sistemas de computação Noções de sistemas de computação Software Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá cba Este trabalho está licenciado com uma Licença Creative Commons

Leia mais

Linguagens de Programação Aula 12

Linguagens de Programação Aula 12 Linguagens de Programação Aula 12 Celso Olivete Júnior [email protected] Na aula passada Implementando subprogramas 2 Na aula de hoje Suporte para a programação orientada a objetos 3 Roteiro Introdução

Leia mais

Estruturas de Dados Aulas 3 e 4: Uso da. 14/03/2011 e 16/03/2011

Estruturas de Dados Aulas 3 e 4: Uso da. 14/03/2011 e 16/03/2011 Estruturas de Dados Aulas 3 e 4: Uso da memória e Vetores 14/03/2011 e 16/03/2011 Uso da memória Existem 3 maneiras de reservar o espaço da memória: Variáveis globais (estáticas) Espaço existe enquanto

Leia mais

Métodos Computacionais. Funções, Escopo de Variáveis e Ponteiros

Métodos Computacionais. Funções, Escopo de Variáveis e Ponteiros Métodos Computacionais Funções, Escopo de Variáveis e Ponteiros Tópicos da Aula Hoje vamos detalhar funções em C Escrevendo funções Comando return Passagem de argumentos por valor Execução de uma função

Leia mais

Suponha um conjunto habitacional, com várias famílias... imagina se todas elas morassem em uma única casa?

Suponha um conjunto habitacional, com várias famílias... imagina se todas elas morassem em uma única casa? Funções Suponha um conjunto habitacional, com várias famílias...... imagina se todas elas morassem em uma única casa? Funções Programação de Computadores 1 de 28 Funções Na Programação, funções são conjuntos

Leia mais

Linguagem C Princípios Básicos (parte 1)

Linguagem C Princípios Básicos (parte 1) Linguagem C Princípios Básicos (parte 1) Objetivos O principal objetivo deste artigo é explicar alguns conceitos fundamentais de programação em C. No final será implementado um programa envolvendo todos

Leia mais