Вы находитесь на странице: 1из 3

Semntica de Linguagens de Programao

Lista de exerccios 2 (Parte 2)


1) Explique escopo dinmico e escopo esttico.
O escopo dinmico baseia-se na seqncia de chamada de subprogramas, no em suas
relaes espaciais um com o outro. Dessa forma, o escopo pode ser determinado
somente em tempo de execuo. J no escopo esttico, o escopo de uma varivel pode
ser determinado estaticamente, ou seja, antes da execuo.
2) Defina coero, erro de tipo, verificao de tipo e tipificao forte.
A verificao de tipos a atividade de assegurar que os operandos de um operador
sejam de tipos compatveis. Um tipo compatvel aquele vlido para o operador ou com
permisso, nas regras da linguagem, para ser convertido pelo cdigo gerado pelo
compilador para um tipo vlido. A essa converso automtica chama-se coero. Um
erro de tipo a aplicao de um operador a um operando de tipo imprprio. Tipificao
forte quando todos os tipos so vinculados estaticamente.
3) Defina e exemplifique compatibilidade de tipo de nome e compatibilidade de
tipo de estrutura.
A compatibilidade de nome significa que duas variveis tm tipos compatveis somente
se estiverem na mesma declarao ou em declaraes que usam o mesmo nome de tipo.
Por exemplo, supondo que o Pascal usasse compatibilidade estrita de nomes de tipo,
considere o seguinte:
Type indextype = 1..100;
Var
Cont: integer;
Indice: indextype;
As variveis cont e ndice no so compatveis; cont no seria atribuda a ndice e viceversa.
A compatibilidade de estrutura significa que duas variveis tm tipos compatveis se os
seus tipos tiverem estruturas idnticas. Por exemplo, considere as seguintes declaraes
assemelhadas com Pascal:
Type celcius = real;
Fahrenheit = real;
As variveis desses dois tipos so consideradas compatveis sob a compatibilidade de
tipo de estrutura, permitindo que elas sejam misturadas em expresses.

Lista de exerccios 3

1) Descreva os tipos primitivos de dados apresentados nas linguagens C e Java.


Comente o tipo booleano.
Inteiro: O tipo de dados primitivo numrico mais comum o inteiro. Um valor inteiro
representado em um computador por uma cadeia de bits, com um dos bits tipicamente
na extrema esquerda, representando o sinal. Tipos inteiros so suportados diretamente
pelo hardware.
Vrgula-Flutuante: Os tipos de dados com vrgula-flutuante modelam os nmeros reais,
mas as representaes so somente aproximaes para a maioria dos nmeros reais. A
maioria das linguagens oferecem dois tipos de vrgula-flutuante, que so float e Double.
Booleano: Os tipos booleanos so os mais simples de todos. Sua faixa de valores tem
somente dois elementos, um para verdadeiro e um para falso.
Caracter: Os dados de caracteres so armazenados nos computadores como codificaes
numricas. A codificao mais comum a ASCII, que usa valores de 0 a 127 para
codificar os 128 diferentes caracteres.
2) Analise como as linguagens C e Java implementam o tipo de dado cadeia de
caracteres. (Como implementado, quais vantagens e desvantagens podem ser
apontadas em cada linguagem?)
Em C so usados vetores do tipo char para armazenar cadeias de caracteres e para
oferecer uma coleo de operaes com cadeias por meio da biblioteca-padro cujo
arquivo de cabealhos string.h. J em Java, as cadeias so suportadas como um tipo
primitivo pela classe String, cujos valores so cadeias constantes, e pela classe
StringBuffer, cujos valores so mutveis e assemelham-se muito mais a vetores de
caracteres. Em C o tamanho de uma varivel se baseia no tamanho dinmico limitado
(tamanho varivel at um mximo especificado), j em Java o tamanho de uma String
esttico (tamanho da cadeia no se modifica ao longo da execuo do programa).
3) Defina o tipo ponteiro e o tipo referncia. Comente as questes de projeto
relacionadas a estes tipos de dados.
Um tipo ponteiro aquele em que as variveis tm uma faixa de valores que consiste
em endereos de memria e um valor especial, o nil. O nil no um endereo de
memria vlido e serve para indicar que um ponteiro no pode ser usado atualmente
para referenciar qualquer celular de memria. As questes de projeto relacionadas a
ponteiro so:
Quais so o escopo e o tempo de vida de uma varivel de ponteiro?
O escopo de uma varivel do tipo ponteiro qualquer instruo que possa ser
referenciada atravs de um endereo de memria. O tempo de vida de um ponteiro vai
depender da varivel que ele esta vinculado.
Qual o tempo de vida de uma varivel dinmica no monte?
O tempo de vida de uma varivel no monte se inicia quando ela vinculada a uma
clula especfica e encerra-se quando ela desvinculada.
Os ponteiros so restritos quanto ao tipo de valor para o qual eles apontam?
O ponteiro que aponta para um tipo no pode apontar para um tipo diferente, a menos
que seja possvel fazer a converso entre eles.

Os ponteiros so usados para gerenciamento de armazenamento dinmico, para


endereamento indireto, ou para ambos?
Para ambos, pois usando um ponteiro possvel acessar o contedo de memria de uma
varivel sem referenci-la diretamente, o que conhecido como endereamento
indireto. Alm do endereamento indireto, um ponteiro tambm pode ser utilizado em
um programa para alocar memria em tempo de execuo.
A linguagem deve suportar tipos ponteiros, tipos referncia ou ambos?
Depende da linguagem. Uma linguagem pode ter ambos os tipos ou no. Como exemplo
C++ da suporte para ambos, j linguagens mais novas como Java no utilizam o tipo
ponteiro.
Um registro um agregado possivelmente heterogneo de elementos de dados. Cada
elemento individual identificado por seu nome. As questes de projeto relacionadas a
registros so:
Qual a forma sinttica das referncias a campos?
Elementos do registro, ou os campos, so nomeados com identificadores, e as
referncias a eles so feitas usando esses identificadores.
So permitidas referncias elpticas?
Referncias elpticas so aquelas em que o campo nomeado, mas qualquer um ou
todos os nomes do registro podem ser omitidos, contanto que a referncia resultante no
seja ambgua.