Respuestas hojas presencia 1.

Anuncio
Prácticas Compiladores Solución Problemas
1. A que parte del compilador proporciona datos el analizador morfológico.
Solución Al sintáctico (según la esquema).
2.¿Quien a quien llama?
• el sintáctico al morfológico.
• el morfológico al sintáctico.
• Depende del lenguaje.
Solución El sintáctico llama al morfológico si se trata de un solo programa con un hilo. La respuesta es consecuencia de la respuesta del problema
1.
Problemas 3...6. Se supone que tenemos un lenguaje donde todos los
identificadores están escritos en mayúscula y contienen mas de 2 letras.
3. Dada la siguiente función pre-hash
prh = id[0]ˆid[1];
¿Cuantos bines no vacı́os puede tener un hash con tabla de tamaño N=1000
elementos?
Solución
No más que 32 bines no vacı́os.
0 0
A tiene código 01000001B y 0 Z 0 – 01011010B. Por lo tanto los primeros
3 bits del resultado son 000.
Hay que comprobar que para cualquer valor v entre 0 y 31 existen letras
cuyo xor da v.
Si v < 16 y v 6= 1, v ˆ 0 A0 produce codigo de una letra que está entre ’A’
y ’O’ y v =0 A0 ˆv ˆ 0 A0 . v = 1 se consigue con 0 A0 ˆ 0 C 0 .
Si v > 15, utilizando 0 P 0 = 01010000B o 0 Q0 y una letra entre 0 A0 y 0 O0 se
consiguen en manera parecida todos los valores entre 16 y 31.
4. Ídem problema 3 para
prh = id[0] + id[1];
1
Solución: Hay 26+26=52 posibles resultados, porque los códigos ASCII
de ’A’ a ’Z’ son 26 números consecutivos.
5. Si los identificadores contienen solo las letras ’A’ ’B’ y ’C’ con igual
probabilidad y la función pre-hash es
prh = id[0] + id[1];
dar limitación superior del tiempo medio del acceso al hash con 81000 elementos almacenados, si cada comparación tarda 1 ms y numero de bines
10000.
Solución: Notar que hay valores duplicados, por ejemplo, ’A’+’B’=’B’+’A’.
Los valores posibles del pre hash son
((0 A0 +0 A0 ),
(0 A0 +0 B 0 ,0 B 0 +0 A0 ),
(0 A0 +0 C 0 ,0 B 0 +0 B 0 ,0 C 0 +0 A0 ),
(0 B 0 +0 C 0 ,0 C 0 +0 B 0 ),
(0 C 0 +0 C 0 ))
entonces hay 5 grupos con probabilidades pi = (1/9, 2/9, 3/9, 2/9, 1/9). El
numero de bines es mayor que 5. Por lo tanto el tiempo medio de comparaciones no es mejor que
T =
X
1
× 1ms × 81000elementos ×
p2i = 9.5seg.
2
También se acepta respuesta 19 seg. porque no está especificado de qué tipo
de acceso se trata.
2
Todavı́a estáis a tiempo
6. Problema para resolver en casa (no obligatorio). Utilizando la funcionalidad del hash de la primera practica y un fichero de casi todas las
palabras en ingles (part-of-speech.txt), hacer un comprobador de ortografı́a
con entrada un fichero de palabras (palabra por linea), que para cada palabra
no encontrada el part-of -speech.txt, escribe la pantalla por pantalla.
La funcionalidad del programa tiene que estar igual al del siguiente script:
awk ’{if (FILENAME=="pos/part-of-speech.txt") dict[\$1]=1;
else { if (\$1 in dict) ; else print \$1;}
}’ pos/part-of-speech.txt pos/part-of-speech.txt se puede conseguir, por ejemplo de:
http://prdownloads.sourceforge.net/wordlist/pos-1.tar.gz?use mirror=umn
Se puede utilizar el siguiente script para separar un texto en palabras:
sed ’s/[^a-zA-Z]/ /g’ | awk ’\{for(i=1;i<=NF;i++) print upper(\$i);\}’
3
Descargar