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

Documentos relacionados
Verificação de Tipo. Unions. Verificação de tipo estática. Verificação de tipo dinâmica

Tipo. Tipo de uma variável: especificação de

Erros de Tipo em Pascal Simplifificado

Paradigmas de Programação

Sistemas de Tipos. Prof. Alberto Costa Neto Linguagens de Programação. Departamento de Computação Universidade Federal de Sergipe

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

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

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

Tipos de Dados. George Darmiton da Cunha Cavalcanti

Nomes, vinculações e escopos

Nomes, vinculações e escopos

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

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

Paradigmas de Linguagens de Programação. Expressões e Instruções de Atribuição

Linguagens de Programação. Marco A L Barbosa

Espaço de Tipos. Amarração Tipo. Amarração Valor. Amarração Localização. Amarração Nome. Objeto de Dado

Conceitos de Linguagens de Programação

CAP. VI ANÁLISE SEMÂNTICA

Expressões e Instruções de Atribuição. George Darmiton da Cunha Cavalcanti

Linguagens de Programação Conceitos e Técnicas. Amarrações Prof. Tiago Alves de Oliveira

Linguagem de Programação e Compiladores

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

Tipos de dados. Marco A L Barbosa malbarbo.pro.br. Departamento de Informática Universidade Estadual de Maringá

Capítulo 8. Estruturas de Controle no Nível de Sentença

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

Linguagens de Programação Conceitos e Técnicas. Expressões e Comandos Prof. Tiago Alves de Oliveira

Introdução. Paradigmas de Linguagens. Introdução. Tipos de Dados Primitivos. Prof. Ms. Luiz Alberto Contato:

Capítulo 6. Tipos de Dados

Linguagens de Programação. Tipos. Carlos Bazilio

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

Análise Semântica e Representação Intermédia

Variáveis. Prof. Alberto Costa Neto Linguagens de Programação. Departamento de Computação Universidade Federal de Sergipe

Compiladores Análise de Tipos

Compiladores Análise de Tipos

Universidade Estadual da Paraíba - UEPB Curso de Licenciatura em Computação

Análise Semântica e Tratamento de Erros Dependentes de Contexto

02. [Sebesta, 2000] Quais são as vantagens e as desvantagens dos tipos de dados decimais?

Tipos de dados. Marco A L Barbosa malbarbo.pro.br. Departamento de Informática Universidade Estadual de Maringá

Paradigmas de Linguagem de Programação. Paradigma Imperativo

Análise Semântica: Verificação de Tipos

Tipos. O Conceito de Tipo

Análise Semântica e Representação Intermédia

Paradigmas de Linguagens

Conceitos de Linguagens de Programação

Estudos de Linguagens de Programação - Revisão

Implementando subprogramas

Conceitos de Linguagens de Programação

Prof. Franklin Ramalho

Estruturas de controle no nível de sentença

Introdução à Geração de Código

Valores e Tipos de Dados Prof. Hudson Costa

Sintaxe do Pascal Simplificado Estendido de 12 novas construções em Notação EBNF (BNF estendida)

Linguagem de programação: Pascal

Projeto de Linguagem. Linguagens de Programação

15/03/2018. Professor Ariel da Silva Dias Aspectos sintáticos e semânticos básicos de linguagens de programação

Implementação de subprogramas

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

O que é uma variável?

Linguagens de Programação Aula 3

Linguagens de Programação Conceitos e Técnicas. Valores e Tipos de Dados Prof. Tiago Alves de Oliveira

Como construir um compilador utilizando ferramentas Java

Compiladores Análise de Tipos

Linguagem Algorítmica OO. Linguagem Algorítmica

Linguagens de Programação 2 Amarrações

Universidade Federal Rural de Pernambuco Departamento de Estatística e Informática Subprogramas

Paradigmas de Linguagens de Programação. Subprogramas

Detalhes da geração de código Usando a técnica ad hoc, amarrada aos procedimentos sintáticos, igual à análise semântica

Aspectos preliminares

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

Linguagem Computacional

Paradigmas de Linguagem de. Programação Profª. Roberta B Tôrres de programação referem-se a:

Conceitos de Linguagens de Programação

Linguagens de Programação Aula 11

Compiladores. Análise Semântica

FACULDADE BATISTA MINEIRA - CST Banco de Dados Estruturas de Dados - Variáveis

SEMÂNTICA. Rogério Rocha. rode = program simples = var x : int := 3 in x := x + 5 end.

Linguagens de Programação Aula 8

Aula 6.

RESUMO DA DISCUSSÃO SOBRE LINGUAGENS DE PROGRAMAÇÃO DO DIA 26 DE OUTUBRO DE 2006

Trabalho Linguagem e Programação de Compiladores

Tipos, Literais, Operadores

Tipos, Literais, Operadores

Linguagens de Programação

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

Sintaxe e Semântica. George Darmiton da Cunha Cavalcanti.

Conceitos de Linguagem de Programação - 2

Compiladores. Análise Semântica

FACULDADE LEÃO SAMPAIO

Linguagens de Programação. Introdução. Carlos Bazilio

ao paradigma imperativo

Encapsulamento e Modularização

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

JavaScript (Elementos de Programação e Programação Básica)

CIÊNCIA DA COMPUTAÇÃO - LINGUAGEM DE PROGRAMAÇÃO II REVISÃO POO

Encapsulamento e Modularização

Compiladores Prof. a Mariella Berger. Trabalho 2 Analisador Léxico

Conceitos de Linguagens de Programação - Características. Paavo Soeiro

Aula 1 Java Prof. Dr. Sylvio Barbon Junior

Transcrição:

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 nomes amarração escopo tipos, verificação de tipos

Variáveis (nome, endereço, valor, tipo, tempo de vida, escopo) Aliases, amarração, tempo de amarração, declarações, verificação de tipos, tipagem forte, regras de escopo, ambientes de referência

Tipo Tipo de uma variável: especificação de da classe de valores que podem ser associados à variável, das operações que podem ser usadas para criar, acessar e modificar esses valores [Ghezzi, Jazayeri] Exemplo Tipo boolean em Pascal Valores: true e false Operações: and, or e not

Verificação de Tipos Atividade de assegurar-se que os operandos de um operador possuem tipos compatíveis generalização subprograma (operador) e parâmetros (operandos) comando de atribuição (:= operador; lhs e rhs operandos) Um tipo compatível é Um tipo válido para ser usado por um dado operador, ou Um tipo que pode ser convertido implicitamente em um tipo válido coerção: conversão automática Um erro de tipo é a aplicação de um operador a um operando de tipo inadequado.

Exemplos type range = 1..10; int a; real b,c; range d; proc x (int p1, real p2) { } if (a > 0) then c := a * 99 + b; x(d,c);

Verificação de Tipos verificação de tipos estática Se a amarração de tipos for estática, a verificação de tipos poderá ser estática (em sua maior parte) verificação de tipos dinâmica Se a amarração de tipos for dinâmica, a verificação de tipos deve ser dinâmica APL, JavaScript É melhor detectar erros em tempo de compilação, ou seja, estaticamente Custo, confiabilidade

Áreas Problemáticas Verificação de Tipos type shape = (circle, triangle, rectangle); colors = (red, green, blue); figure = record filled: boolean; color: colors; case form: shape of circle: (diameter: real); triangle: (leftside: integer; rightside: integer; angle: real); rectangle: (side1: integer; side2: integer) end;

Figura: União discriminada (ou união disjunta ou registro variante)

Tipificação Forte Uma linguagem de programação é dita "fortemente tipificada" se seus erros de tipos sempre forem detectados Os tipos de todos os operandos podem ser determinados, seja em tempo de compilação ou em tempo de execução

Tipificação Forte FORTRAN 77 não é fortemente tipificada parâmetros formais e reais EQUIVALENCE Pascal quase fortemente tipificada registros variantes não são verificados C e C++ não são: verificação de tipos de parâmetros pode ser evitada "unions" não são verificados

Tipificação Forte Ada é praticamente fortemente tipificada registros variantes são verificados função UNCHECKED_CONVERSION permite suspensão temporária da verificação de tipos ML é fortemente tipificada identificadores são amarrados a tipos estaticamente (declaração), ou tipos são reconhecidos via inferência Java é fortemente tipificada como Ada

Tipificação Forte Benefícios Permite a detecção de usos de variáveis que resultam em erros de tipo Permite a detecção, em tempo de execução, de uso de valores de tipos incorretos em variáveis que podem armazenar valores de tipos diferentes Regras de coerção afetam/enfraquecem tipificação forte C++ versus Ada

Compatibilidade de Tipos A idéia de compatibilidade de tipos está relacionada a questões de verificação de tipos Métodos para definir compatibilidade de tipos nominal estrutural A maior parte das linguagens combina esses métodos

Compatibilidade de Tipos Nominal Compatibilidade de tipos nominal Duas variáveis são compatíveis se: Estão na mesma declaração, ou Estão em declarações distintas e usam o mesmo nome de tipo Exemplo type Int1 = Integer; Int2 = Integer; var v1: Int1; v2, v3: Int1; v4: Int2;

Compatibilidade de Tipos Nominal Compatibilidade de tipos nominal é de fácil implementação porém muito restritiva: Subranges de tipo integer não são compatíveis com o tipo integer. Exemplo: type indextype= 1..100; var count : integer; index : indextype; Parâmetros formais devem ter o mesmo tipo de seus parâmetros reais (Pascal)

Compatibilidade de Tipos Estrutural Compatibilidade de tipos estrutural Duas veriáveis possuem tipos compatíveis se: Seus tipos possuem estruturas idênticas Compatibilidade de tipos estrutural é mais flexível, porém mais difícil de implementar

Compatibilidade de Tipos Estrutural Problemas Não se consegue diferenciar tipos com a mesma estrutura: type celsius = real; fahrenhheit = real;

Compatibilidade de Tipos Estrutural Perguntas: Registros: são compatíveis se forem estruturalmente compatíveis porém com nomes de campos distintos? Arrays: são compatíveis se possuírem mesmo tipo base e tamanho, porém com esquema de indexação diferente? (ex.: [0..10] e [1..11]) Tipos enumerados: são compatíveis se seus componentes forem escritos de modo diferente?

Compatibilidade de Tipos Exemplos FORTRAN, COBOL Compatibilidade de tipos estrutural Pascal (ISO Standard Pascal, 1982) Compatibilidade de tipos estrutural, exceto para parâmetros formais C Compatibilidade de tipos estrutural, exceto para registros e uniões (equivalência de declaração) C++ Compatibilidade de tipos nominal Compatibilidade de objetos (herança)

Exemplos Compatibilidade de Tipos Ada: forma restrita de compatibilidade de nomes (uso de tipos derivados e sub-tipos) Tipos derivados permitem que tipos com a mesma estrutura sejam tratados como tipos diferentes (incompátivel com tipo do qual deriva): type celsius is new FLOAT; type fahrenheit is new FLOAT; Subtipos são versões restritas de um tipo existente (compatível com o supertipo): subtype intervalo is INTEGER range 0..99; Tipos anônimos são únicos e incompatíveis: A, B : array (1..10) of INTEGER;

Compatibilidade de Tipos A definição original de algumas linguagens não especifica claramente qual o critério a ser adotado Pascal, 1971

Questões 1. O que é um tipo no contexto de LP? Qual a sua importância? 2. O que é erro de tipo? E verificação de tipos? 3. O que é coerção? 4. O que é tipificação forte (strong typing)? 5. O que é compatibilidade de tipos? 6. Qual a diferença entre compatibilidade de tipos nominal e estrutural? 7. O que é equivalência de declaração?