Verificação de Tipos e Escopos

Slides:



Advertisements
Apresentações semelhantes
Estruturação de Linguagens (Pascal e C++)
Advertisements

Linguagem PASCAL Subprogramas
SISTEMAS OPERACIONAIS (SO) Aula 5 Luciana A. F. Martimiano 2002
Capítulo VIII – Subprogramação
Paradigmas de Linguagens Tipos de Dados
Prof. Heloise Manica Paris Teixeira
PROGRAMAÇÃO MODULAR (com uso de subprogramas) prof
Alocação Dinâmica de Memória
LPG - I: Alocação Dinâmica de Memória - Ponteiros
AULA – Linguagem C – Vetores, Ponteiros Estruturas
Disciplina: AAM Profa. Ana Watanabe 03/13 vol.2
Linguagem C Estruturas de Controle de Fluxos
Análise Léxica Supondo o trecho de programa abaixo:
Construção de Compiladores
Uso de Orientação a Objetos em Java
Linguagens de Programação
Aula 4 Nomes, Vinculações, Tipos e Escopos
1 Aula 7 ImplementandoSubprogramas Universidade do Vale do Rio dos Sinos
Ponteiros.
Avaliando e Compreendendo o Desempenho - Respostas
Algoritmos e Programação
O Portal do Estudante de Computação
O Portal do Estudante de Computação
Paradigmas de programação
Análise Semântica e Representação Intermédia
Aula prática 8 Ponteiros Monitoria de Introdução à Programação
Aula prática 13 Orientação a Objetos – C++ Parte 1
Sub-programas. Mecanismo de composição de programas Sub-programa está para peça de LEGO assim como um programa está para a construção.
Aula prática 6 Vetores e Matrizes
Linguagem de Programação II Parte IX
Conceitos de Linguagem de Programação
Caio Argolo Luiz Daud Jorge Roberto
Introdução a Programação COM 100 Aula 07 Procedimentos.
Ponteiros em Pascal Variáveis ponteiros são aquelas que guardam o endereço de outra, possibilitando o acesso a seu conteúdo. Declaração em Pascal:  var.
Eric, Fabrício, João Vicente
Prof. Daniel Aula 03.  Criar Projeto  Criar Pacote  Criando classes  Meu primeiro programa  Compilar  Comentários  Variáveis.
Prof. Ricardo Santos PONTEIROS
Tipos de Dados Paradigmas de Programação
Tipos Abstratos de Dados
Nomes, Variáveis e Vinculações
Paradigmas de Linguagens de Programação Linguagem Imperativa 2
Expressões e Instrução de Atribuição
Paradigmas de Linguagens de Programação Linguagem Orientada a Objetos 1 Augusto Sampaio e Paulo Borba Departamento de Informática Universidade Federal.
Classes, Objetos, Atributos e Métodos JAVA
Paradigmas de Programação - prof Gláucya Carreiro Boechat1 Elaborando um Programa Prof.: Gláucya Carreiro Boechat Universidade.
Ambiente de Execução - Rotinas
Capítulo III Modularização Procedimentos e Funções Universidade Federal de São Carlos Departamento de Computação Aluna: Luanna Lopes Lobato
Lógica Estruturada Aplicada
Universidade do Vale do Rio dos Sinos - São Leopoldo -
Capítulo VIII Ambientes de Execução
Analise Semântica aula-10-analise-semântica.pdf.
Modularização Dividir um problema em subproblemas Módulos menores facilita a depuração Dividir o desenvolvimento entre vários programadores “Reutilização”
Regras de escopo Escopo: trecho de codificação no qual o identificador possui significado Escopo de função: identificador válido dentro do trecho de uma.
VARIÁVEIS COMPOSTAS HOMOGÊNEAS UNIDIMENSIONAIS (VETORES)
Back-End Compilação aula-11-back-end.pdf.
Algoritmos e Programação
Critérios de Avaliação das Linguagens de Programação
Aula Prática 3 Funções Monitoria Introdução à Programação.
Fundamentos de linguagens de programação
CES-10 INTRODUÇÃO À COMPUTAÇÃO
©Silberschatz, Korth and Sudarshan (modificado)9.2.1Database System Concepts Capítulo 9: BDs Objecto-Relacional Relações imbricadas Tipos complexos e objectos.
O Portal do Estudante de Computação
PARADIGMAS DE LINGUAGENS EXPRESSÕES E INSTRUÇÕES DE ATRIBUIÇÃO
Linguagens de Programação Pedro Lopes MÓDULO 4- Subprogramas (Procedimentos e Funções) 2010/2011.
MÓDULO 4- Subprogramas (Procedimentos e Funções)
Laboratório de Programação II Método main Dados e Métodos de Classes.
MATA56 Tipos, Verificação de Tipos Agenda Objetivo desta aula: Introduzir os principais aspectos semânticos de variáveis Palavras-chave – nomes.
Java Como Programar, 8/E Deitel/Deitel, 8e. Java – Como programar Copyright © 2010 Pearson Education Slide 1.
Laboratório de Computação Aula 06 e 07 – Implementação de classes Prof. Fábio Dias
SUB-ROTINAS EM PASCAL PROGRAMAÇÃO MODULARIZADA 252.
Transcrição da apresentação:

Verificação de Tipos e Escopos Paradigmas de Programação Prof. Gláucya Carreiro Boechat glaucyacboechat@gmail.com

Verificação de Tipos Verificação de tipos é a atividade de assegurar que os operandos de um operador sejam de tipos compatíveis Um tipo compatível é aquele válido para o operador ou com permissão, nas regras da linguagem, para ser convertido pelo compilador para um tipo válido Essa conversão automática é chamada de coerção Um erro de tipo é a aplicação de um operador a um operando de tipo impróprio

Verificação de Tipos Se todas as vinculações forem estáticas, a verificação de tipos quase sempre poderá ser feita estaticamente Se as vinculações de tipos são dinâmicas então a verificação de tipos deve ser dinâmica

Tipificação Forte Uma linguagem de programação é fortemente tipificada se erros de tipos são sempre detectados Vantagens Permite a detecção de todos os usos equivocados de variáveis que resultem em erros de tipo Exemplos de linguagens C e C++ não são: permitem funções cujos parâmetros não são verificados quanto ao tipo Ada é quase fortemente tipificada (Java é similar)

Tipificação Forte Regras de Coerção Podem enfraquecer a tipificação forte (C++ versus Ada) Ada possui poucas regras de coerção Embora Java possua metade das regras de coerção do C++, logo sua detecção de erros é melhor do que a do C++, sua tipificação forte é bastante inferior a da Ada

Compatibilidade de Tipos Existem dos métodos diferentes de compatibilidade de tipos Compatibilidade de Nome Compatibilidade de Estrutura

Compatibilidade de Tipo de Nome Significa que duas variáveis possuem tipos compatíveis se elas estiverem na mesma declaração ou em declaração que usam o mesmo nome de tipo A compatibilidade de tipo de nome é fácil de implementar mais muito restritiva Uma variável subfaixa dos números dos inteiros não seria compatível com uma variável do tipo inteiro Type indextype = 1 .. 100; {um tipo subfaixa} Var cont : integer; index : indextype; As variáveis cont e index não são compatíveis, cont não seria atribuída a index e vice-versa

Compatibilidade de Tipo de Estrutura Significa que duas variáveis têm tipos compatíveis se os seus tipos tiverem estruturas idênticas Mais flexível, porém mais difícil de implementar

Compatibilidade de Tipos Considere os problemas de tipo entre duas estruturas: Dois registros são compatíveis no tipo se eles possuem a mesma estrutura mas usam diferentes nomes para os campos? Dois vetores são compatíveis se eles são os mesmos exceto pela faixa de indexação? Exemplo: [1..10] e [0..9] Usando compatibilidade de tipo de estrutura não é possível diferenciar entre tipos que tenham a mesma estrutura Exemplo: Diferentes unidade de velocidade, ambas ponto flutuante Celsius e Fahrenheit, ambos ponto flutuante

Escopo O escopo de uma variável é a faixa de instruções na qual a variável é visível Uma variável é visível em uma instrução se puder ser referenciada nessa instrução As variáveis não-locais de uma unidade ou de um bloco de programa são as visíveis dentro deste, mas não são declaradas lá

Escopo Estático Método para vincular nomes a variáveis não-locais Para conectar uma referência a uma variável, o compilador precisa encontrar a declaração Processo de busca: Caso a declaração não for encontrada localmente, passa-se a buscar em escopos mais amplos O pai-estático (static parent) é o subprograma no qual encontra-se a declaração Os ancestrais estáticos são todos os subprogramas até se chegar a declaração

A variável x em sub1 é declarada Escopo Estático procedure big; var x : integer; procedure sub1; begin { sub1 } ... x ... end; { sub1 } procedure sub2; begin { sub2 } ... end; begin { big } end; { big } A variável x em sub1 é declarada no procedimento big

Escopo Estático Variáveis podem ser escondidas de uma unidade quando a mesma possui uma variável com o mesmo nome C++ e Ada permitem acesso a essas variáveis escondidas Em Ada: unit.name Em C++: class_name::name program main; var x : integer; procedure sub1; begin { sub1} ...x... end; { sub1 } begin { main } ... end; { main }

Escopo Dinâmico Baseia-se na seqüência de chamada de subprogramas, não em suas relações espaciais (temporal versus espacial) Desta forma o escopo pode ser determinado apenas em tempo de execução Quando a procura por declarações locais falha, as declarações do pai-dinâmico (procedimento de chamada) são pesquisadas, e assim sucessivamente Caso nenhuma declaração for encontrada em qualquer ancestral dinâmico, haverá um erro em tempo de execução

Escopo Dinâmico - Exemplo procedure big; var x: integer; procedure sub1; begin { sub1 } ... x ... procedure sub2; var x : integer; begin { sub2 } ... end; begin { big } end; { big } BIG chama SUB2 SUB2 chama SUB1 SUB1 usa x Nesse caso, SUB1 usa o x declarado em SUB2