A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Linguagem de Expressões 2

Apresentações semelhantes


Apresentação em tema: "Linguagem de Expressões 2"— Transcrição da apresentação:

1 Linguagem de Expressões 2

2 Linguagem de Expressões 2 - LE2
Estende LE1 com identificadores (variáveis) que possuem um valor (constante) Durante a interpretação e verificação de tipos surge a necessidade de contextos: mapeamento entre identificadores e valores mapeamento entre identificadores e tipos Na avaliação de uma expressão, a ocorrência de um identificador é substituída pelo valor associado ao identificador Um programa é uma expressão

3 Apresentação da Linguagem de Expressões 2 - LE2

4 Explorando conceitos na LE2

5 Ligação, amarração ou binding
Em LE2, surge a necessidade de armazenar os valores dos identificadores (variáveis) Em geral um binding é uma associação entre um identificador e uma entidade (constante, variável, função, procedimento, tipo, etc.) Um ambiente (environment) ou contexto é um conjunto de bindings Portanto, um contexto é um mapeamento de identificadores em entidades

6 Ligação, amarração ou binding
Em LE2, o único tipo de binding possível é uma associação entre um identificador e um valor (constante) Uma expressão é interpretada (avaliada) em um dado contexto; todo identificador que aparece na expressão tem que ter um binding no contexto Uma mesma expressão ocorrendo em partes diferentes do programa pode produzir resultados distintos (quando os contextos forem diferentes) Outros tipos de binding vão aparecer à medida que estudarmos as outras linguagens.

7 Ligação, amarração ou binding
As entidades que podem ser associadas a identificadores são denominadas ligáveis ou bindable As entidades bindable de Pascal são: valores primitivos e strings referências a variáveis funções e procedimentos tipos Mas valores do tipo registro ou arrays não são bindable ML é mais uniforme neste aspecto, pois todos os tipos de valores são bindable

8 Escopo Escopo é a porção do texto do programa na qual uma dada declaração (ou binding resultante) é visível Em uma linguagem monolítica (sem estrutura de bloco), o escopo de uma declaração é todo o programa, como em Cobol. Há a estrutura de blocos linear (ou flat) onde um programa é particionado em blocos (tipicamente procedures ou subrotinas), como em Fortran. Neste caso, variáveis declaradas no programa e os nomes das rotinas possuem escopo global; variáveis declaradas na subrotina possuem escopo local.

9 Escopo A estrutura de blocos aninhados (ou nested) é a mais geral e permite que um bloco seja introduzido dentro de qualquer outro bloco Neste caso, há vários níveis de escopo Surge o conceito de “buraco” no escopo de um identificador; isto ocorre quando em uma parte do texto do programa o identificador não é visível porque um outro (com mesmo nome) foi introduzido. LE2 permite estrutura de blocos

10 Declarações Uma declaração é uma construção do programa a partir da qual bindings são definidos Alguns tipos de declaração: definições declarações colaterais declarações seqüenciais declarações recursivas LE2 permite definições (declaração de constantes) e declarações colaterais

11 Semântica (Operacional)
A avaliação (redução, simplificação) de um termo se dá através de sua redução a uma forma normal (ou canônica), através de Reescrita de Termos Composicionalidade: valor obtido a partir dos valores dos subcomponentes. Na forma como LE2 foi implementada, as expressões mais internas são avaliadas primeiro A forma canônica de uma expressão em LE2 é o valor resultante da avaliação Este valor é o significado (semântica) da expressão

12 Transparência Referencial
Uma expressão pode ser sempre substituída pelo seu valor (ou por outra expressão que denote o mesmo valor). Isto é válido em LE2 porque as variáveis de LE2 são como em matemática (não mudam de valor) Ou seja, não há efeito colateral Porém, deve-se lembrar que o resultado da avaliação de uma expressão depende do contexto onde a expressão é avaliada.

13 Expressões Indefinidas
Não podem ser reduzidas; não denotam um valor Exemplo: 1\0 Portanto, formas normais nem sempre existem É comum se introduzir um símbolo especial  (“bottom”) para representar um valor indefinido 1\0 = 

14 Exercício Modificar o interpretador de LE2 de forma que as declarações em um let sejam seqüenciais ao invés de colaterais.

15 Leitura Programming Language Concepts and Paradigms
Capítulo 4 (exceto a Seções e 4.4.2)


Carregar ppt "Linguagem de Expressões 2"

Apresentações semelhantes


Anúncios Google