1. Todos los elementos son de tipo entero.
2. Los elementos no mantienen una relación de orden.
3. No hay elementos repetidos.
4. Inicialmente un conjunto está vacío (tiene 0 elementos)
5. El tamaño máximo de un conjunto es de 64 elementos.
La
normativa de evaluación que se aplicará está publicada en la página web del
laboratorio de Procesadores de Lenguaje.
Las normas de entrega de la práctica también se describirán en la página web del laboratorio de Procesadores de Lenguaje.
Se sugiere al alumno que escriba un fichero compatible con la herramienta make y con el nombre makefile que para el objetivo all genere el ejecutable de nombre alfa.
IMPORTANTE: Se sugiere al alumno que implemente un método que garantice que la interrupción de cualquier programa debido a un error "controlado" en tiempo de ejecución gestione de manera correcta la pila eliminando de la misma cualquier residuo antes de terminar la ejecución. Una posible implementación sería declarar una variable en ensamblador ( __esp resd 1) en la cual se almacene el puntero de pila al inicio del programa (mov dword [__esp] ,esp ) y en la etiqueta "final" utilizada como destino de salto de todos los errores controlados en tiempo de ejecución restaurar el puntero de pila que se guardó al inicio del programa (mod dword esp, [__esp]). La variable __esp tiene dos guiones bajos como primeros caracteres (en lugar de uno solo) para evitar el error que se produciría si en un programa ALFA hubiera declarada una variable de nombre "esp".
1: |
<programa> |
::= |
INICIO <declaraciones> <sentencias> FIN |
2: |
<declaraciones> |
::= |
<declaracion> |
3: |
|
| |
<declaracion>
<declaraciones> |
4: |
<declaracion> |
::= |
<clase>
<identificadores> ; |
5: |
<clase> |
::= |
<clase_escalar> |
7: |
|
| |
<clase_vector> |
8: |
| |
<clase_conjunto> |
|
9: |
<tipo> |
::= |
ENTERO |
10: |
|
| |
LOGICO |
11: |
<clase_escalar> |
::= |
<tipo> |
12: |
<clase_conjunto> |
::= |
CONJUNTO
DE <constante_entera> |
13: |
<clase_vector> |
::= |
VECTOR <tipo> DE <constante_entera> |
14: |
|
| |
VECTOR <tipo> DE <constante_entera> POR
<constante_entera> |
15: |
| |
VECTOR <tipo> DE <constante_entera> POR
<constante_entera> POR
<constante_entera> |
|
16: |
<identificadores> |
::= |
<identificador> |
17: |
|
| |
<identificador> ,
<identificadores> |
|
<sentencias> |
::= |
<sentencia> |
19: |
|
| |
<sentencia>
;
<sentencias> |
20: |
<sentencia> |
::= |
<asignacion> |
21: |
|
| |
<condicional> |
22: |
|
| |
<bucle> |
23: |
|
| |
<lectura_escritura> |
24: |
| |
<operacion_vector> |
|
25: |
| |
<operacion_conjunto> |
|
26: |
<asignacion> |
::= |
<identificador> =
<exp> |
27: |
|
| |
<elemento_vector> =
<exp> |
28: |
<elemento_vector> |
::= |
<identificador> [
<exp> ] |
29: |
|
| |
<identificador> [
<exp> , <exp> ] |
30: |
| |
<identificador> [
<exp> , <exp> , <exp> ] |
|
31: |
<condicional> |
::= |
SI <exp> ENTONCES <sentencias> FIN |
32: |
|
| |
SI <exp> ENTONCES <sentencias> SINO
<sentencias> FIN |
33: |
<bucle> |
::= |
MIENTRAS <exp> HACER <sentencias> FIN |
34: |
<lectura_escritura> |
::= |
LEER <identificador> |
35: |
|
| |
LEER <elemento_vector> |
36: |
|
| |
ESCRIBIR <exp> |
37: |
| |
ESCRIBIRN <identificador> |
|
38: |
<operacion_vector> |
::= |
SUMA(<identificador>,
<identificador>, <identificador>) |
39: | | |
POR(<identificador>,
<identificador>, <identificador>) |
|
40: | | |
COPIA(
<identificador>, <identificador>) |
|
41: |
<operacion_conjunto> |
::= |
UNION(<identificador>,
<identificador>, <identificador>) |
42: |
| |
INTERSECCION(<identificador>,
<identificador>, <identificador>) |
|
43: |
| |
INSERCION(
<exp>, <identificador>) |
|
44: |
| |
VACIAR(
<identificador>) |
|
45: |
<exp> |
::= |
<exp> + <exp> |
46: |
|
| |
<exp> - <exp> |
47: | | | <exp> / <exp> | |
48: |
|
| |
<exp> * <exp> |
49: |
|
| |
- <exp> |
50: |
|
| |
<exp> Y
<exp> |
51: |
|
| |
<exp> O
<exp> |
52: |
|
| |
NO <exp> |
53: |
|
| |
<identificador> |
54: |
|
| |
<constante> |
55: |
|
| |
( <exp> ) |
56: |
|
| |
( <comparacion> ) |
57: |
|
| |
<elemento_vector> |
58: |
| |
TAMANIO(<identificador>) |
|
59: |
| |
PERTENECE(<exp>,
<identificador>) |
|
60: |
<comparacion> |
::= |
<exp> ==
<exp> |
61: |
|
| |
<exp> != <exp> |
62: |
|
| |
<exp> <= <exp> |
63: |
|
| |
<exp> >= <exp> |
64: |
|
| |
<exp> < <exp> |
65: |
|
| |
<exp> >
<exp> |
66: |
<constante> |
::= |
<constante_logica> |
67: |
|
| |
<constante_entera> |
68: |
<constante_logica> |
::= |
VERDADERO |
69: |
|
| |
FALSO |
70: |
<constante_entera> |
::= |
<numero> |
71: |
<numero> |
::= |
<digito> |
72: |
|
| |
<numero>
<digito> |
73: |
<identificador> |
::= |
<letra> |
74: |
|
| |
<letra>
<cola_identificador> |
75: |
<cola_identificador> |
::= |
<alfanumerico> |
76: |
|
| |
<alfanumerico>
<cola_identificador> |
77: |
<alfanumerico> |
::= |
<letra> |
78: |
|
| |
<digito> |
79: |
<letra> |
::= |
a | b | ... | z | A | B
|...| Z |
90: |
<digito> |
::= |
0 | 1 | 2 | 3 | 4 | 5
| 6 | 7 | 8 | 9 |