Nomes, Amarração, Verificação de Tipos, e Escopo
|
|
|
- Francisco Gabeira Diegues
- 9 Há anos
- Visualizações:
Transcrição
1 5 Nomes, Amarração, Verificação de Tipos, e Escopo Concepts of Programming Languages, 5/e Robert W. Sebesta
2 Agenda Objetivo desta aula: Introduzir os principais aspectos semânticos de variáveis Palavras-chave nomes amarração escopo tipos, verificação de tipos
3 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
4 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
5 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.
6 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);
7 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
8 Á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;
9 Figura: União discriminada (ou união disjunta ou registro variante)
10 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
11 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
12 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
13 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
14 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
15 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;
16 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= ; var count : integer; index : indextype; Parâmetros formais devem ter o mesmo tipo de seus parâmetros reais (Pascal)
17 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
18 Compatibilidade de Tipos Estrutural Problemas Não se consegue diferenciar tipos com a mesma estrutura: type celsius = real; fahrenhheit = real;
19 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?
20 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)
21 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;
22 Compatibilidade de Tipos A definição original de algumas linguagens não especifica claramente qual o critério a ser adotado Pascal, 1971
23 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?
Tipo. Tipo de uma variável: especificação de
Checagem de Tipos O que é tipo? Erros de Tipos em FRANKIE não capturados pela gramática Tarefas de um Type Checker e Conversões de Tipos Sistema de Tipos Checagem Estática X Dinâmica Linguagens Fortemente
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
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
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
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
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
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
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
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
Paradigmas de Linguagens de Programação. Expressões e Instruções de Atribuição
Expressões e Instruções de Atribuição Cristiano Lehrer Introdução Expressões são o meio fundamental de especificar computações em uma linguagem de programação: Familiarização com as ordens de avaliação
CAP. VI ANÁLISE SEMÂNTICA
CAP. VI ANÁLISE SEMÂNTICA VI.1 Introdução Semântica SIGNIFICADO, SENTIDO LÓGICO, COERÊNCIA,... Diferença entre SINTAXE e SEMÂNTICA Sintaxe : descreve as estruturas de uma linguagem; Semântica : descreve
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
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
Capítulo 8. Estruturas de Controle no Nível de Sentença
Capítulo 8 Estruturas de Controle no Nível de Sentença Níveis de fluxo de controle Computações são realizadas por meio da avaliação de expressões e da atribuição dos valores a variáveis Para tornar a computação
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
Capítulo 6. Tipos de Dados
Capítulo 6 Tipos de Dados 1. Introdução Tipo de Dados: define uma coleção de valores de dados e um conjunto de operações pré-definidas sobre eles Um descritor é a coleção de atributos de uma variável Um
02. [Sebesta, 2000] Quais são as vantagens e as desvantagens dos tipos de dados decimais?
01. [Sebesta, 2000] O que é um descritor? 02. [Sebesta, 2000] Quais são as vantagens e as desvantagens dos tipos de dados decimais? 03. [Sebesta, 2000] Quais são as questões de projeto relativas aos tipos
Paradigmas de Linguagem de Programação. Paradigma Imperativo
Paradigmas de Linguagem de Programação Paradigma Imperativo Paradigma Imperativo Imperare Comandar É o mais antigo de todos; Baseado no modo de funcionamento do computador; São também chamadas de procedurais;
Análise Semântica: Verificação de Tipos
Análise Semântica: Verificação de Tipos Introdução Verifica se as construções sintaticamente corretas possuem significado lógico dentro da linguagem Verifica a consistência da declaração e uso dos identificadores
Tipos. O Conceito de Tipo
Tipos [email protected] 1 O Conceito de Tipo LPs geralmente permitem a organização de dados em diferentes categorias através do conceito de tipo. Um tipo é definido a partir de um conjunto de valores
Paradigmas de Linguagens
Paradigmas de Linguagens Aula 2: Tipos de dados Professora Sheila Cáceres Tipos de dados Dados são a matéria prima da computação junto com os programas. LPs precisam manipular dados. LPS utilizam os conceitos
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 04 ([email protected]) Aula 4 2 Evolução dos
Estudos de Linguagens de Programação - Revisão
Estudos de Linguagens de Programação - Revisão ([email protected]) O que é uma Linguagem de Programação? Linguagem usada por uma pessoa para expressar um processo através do qual um computador pode
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
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
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
Sintaxe do Pascal Simplificado Estendido de 12 novas construções em Notação EBNF (BNF estendida)
Sintaxe do Pascal Simplificado Estendido de 12 novas construções em Notação EBNF (BNF estendida) Não-terminais são nomes mnemônicos colocados entre parênteses angulares. Vocabulário terminal formado por
Linguagem de programação: Pascal
Aula 04 Linguagem de programação: Pascal Prof. Tecgº Flávio Murilo 26/03/2013 1 Pascal Introdução Pascal é uma linguagem de programação estruturada, criada em 1970 pelo suíço Niklaus Wirth, dando este
Projeto de Linguagem. Linguagens de Programação
Projeto de Linguagem Renato Ferreira Linguagens de Programação Linguagens são adotadas para preencher uma demada Facilitar uma aplicação outrora difícil/impossível Independente da qualidade da linguagem
Implementação de subprogramas
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
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
Linguagens de Programação Aula 3
Aula 3 Celso Olivete Júnior [email protected] Na aula passada... Classificação das LPs (nível, geração e paradigma) Paradigmas Imperativo, OO, funcional, lógico e concorrente 2/33 Na aula de hoje...
Como construir um compilador utilizando ferramentas Java
Como construir um compilador utilizando ferramentas Java p. 1/2 Como construir um compilador utilizando ferramentas Java Aula 1 - Introdução Prof. Márcio Delamaro [email protected] Como construir um
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
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
Detalhes da geração de código Usando a técnica ad hoc, amarrada aos procedimentos sintáticos, igual à análise semântica
Geração de Código para uma Máquina Hipotética a Pilha Detalhes da geração de código Usando a técnica ad hoc, amarrada aos procedimentos sintáticos, igual à análise semântica É composta de 3 Regiões MEPA
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
Paradigmas de Linguagem de. Programação Profª. Roberta B Tôrres de programação referem-se a:
Paradigmas de Linguagem de Programação Conceitos Elementares Profª. Roberta B Tôrres [email protected] Conceitos Elementares de uma Linguagem de Programação Os conceitos mais elementares, suportados
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
Compiladores. Análise Semântica
Compiladores Análise Semântica Análise semântica A semântica define o significado dos programas sintaticamente corretos; Por exemplo, em C, a instrução if(a>b) max = a; else max = b; Diz que a expressão
SEMÂNTICA. Rogério Rocha. rode = program simples = var x : int := 3 in x := x + 5 end.
SEMÂNTICA program simples = var x : int := 3 in x := x + 5 end. rode =? Rogério Rocha Roteiro Introdução Sintaxe Semântica Dinâmica (Métodos formais) Operacional Axiomática Denotacional Estática Conclusão
Trabalho Linguagem e Programação de Compiladores
Trabalho Linguagem e Programação de Compiladores Responda as questões. Os exercícios deverão ser desenvolvidos utilizando as estruturas apresentadas em aula e adequadas para cada problema. Forma de entrega:
Tipos, Literais, Operadores
Tipos, Literais, Operadores Identificadores São palavras utilizadas para nomear variáveis, métodos e classes Na linguagem Java, o identificador sempre começa por letra, sublinhado(_) ou cifrão ($) Não
Tipos, Literais, Operadores
Tipos, Literais, Operadores Identificadores São palavras utilizadas para nomear variáveis, métodos e classes Na linguagem Java, o identificador sempre começa por letra, sublinhado(_) ou cifrão ($) Não
Linguagens de Programação
Linguagens de Programação Celso Olivete Júnior [email protected] Na aula passada Expressões Precedência e associatividade de operador Sobrecarga de operador Expressões de modo misto Várias formas de
Paradigmas de Linguagens de Programação. Tipos de Dados Abstratos
Tipos de Dados Abstratos Cristiano Lehrer Conceito de Abstração O conceito de abstração é fundamental em programação. Quase todas as linguagens suportam abstração de processos, através de subprogramas:
Sintaxe e Semântica. George Darmiton da Cunha Cavalcanti.
Sintaxe e Semântica George Darmiton da Cunha Cavalcanti ([email protected]) Tópicos Introdução O problema de descrever a sintaxe Métodos formais para descrever a sintaxe Gramáticas de atributos Descrevendo
Conceitos de Linguagem de Programação - 2
Conceitos de Linguagem de Programação - 2 Arthur Jovita Guerra Thalles Santos Silva Universidade Estadual de Santa Cruz - Ilhéus, BA 1 de novembro de 2011 1 Revisão Natureza das linguagens de Programação
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
Linguagens de Programação. Introdução. Carlos Bazilio
Linguagens de Programação Introdução Carlos Bazilio [email protected] http://www.ic.uff.br/~bazilio/cursos/lp ??? Pascal aux := 0 for i:=1 to 10 do aux := aux + i 10: i = 1 20: if i > 10 goto 60
ao paradigma imperativo
PARADIGMA FUNCIONAL PARADIGMA FUNCIONAL: INTRODUÇÃO G Exemplos de linguagens funcionais LISP - Início: LP puramente funcional - Depois: acréscimo de alguns recursos imperativos (aumentaram eficiência de
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
JavaScript (Elementos de Programação e Programação Básica)
Linguagem de Programação para Web JavaScript (Elementos de Programação e Programação Básica) Prof. Mauro Lopes 1 Objetivos Iniciaremos aqui o nosso estudo sobre a Linguagem de Programação JavaScript. Apresentaremos
CIÊNCIA DA COMPUTAÇÃO - LINGUAGEM DE PROGRAMAÇÃO II REVISÃO POO
REVISÃO POO INTRODUÇÃO À LINGUAGEM JAVA CRIANDO CLASSES EM JAVA Convenção de Nomes em Java Classes iniciam com letras maiúsculas Métodos, atributos e variáveis locais iniciam com minúsculas. Declaração
Compiladores Prof. a Mariella Berger. Trabalho 2 Analisador Léxico
Compiladores Prof. a Mariella Berger Trabalho 2 Analisador Léxico 1. Objetivo O objetivo deste trabalho é a criação de um analisador léxico para a linguagem Pascalito, um subconjunto modificado da linguagem
Conceitos de Linguagens de Programação - Características. Paavo Soeiro
Conceitos de Linguagens de Programação - Características Paavo Soeiro Motivação Para que possa escolher uma linguagem apropriada ao problema. Melhorar o entendimento da linguagem utilizada. Facilitar o
Aula 1 Java Prof. Dr. Sylvio Barbon Junior
5COP101 Linguagens de Programação Aula 1 Java Prof. Dr. Sylvio Barbon Junior Sylvio Barbon Jr [email protected] 1 Sumário 1) Razões para Estudar Conceitos de LP; 2) Domínios das Linguagens de Programação 3)
