//
Programa que eleva un número entero al cuadrado
INICIO
ENTERO x,
resultado;
LEER x;
resultado=x*x;
ESCRIBIR resultado
FIN
TOKEN_KEY |
1 |
INICIO |
TOKEN_KEY |
3 |
ENTERO |
TOKEN_ID |
100 |
x |
TOKEN_KEY |
25 |
, |
TOKEN_ID |
100 |
resultado |
TOKEN_KEY |
23 |
; |
TOKEN_KEY |
15 |
LEER |
TOKEN_ID |
100 |
x |
TOKEN_KEY |
23 |
; |
TOKEN_ID |
100 |
resultado |
TOKEN_KEY |
26 |
= |
TOKEN_ID |
100 |
x |
TOKEN_KEY |
33 |
* |
TOKEN_ID |
100 |
x |
TOKEN_KEY |
23 |
; |
TOKEN_KEY |
16 |
ESCRIBIR |
TOKEN_ID |
100 |
resultado |
TOKEN_KEY |
2 |
FIN |
//
Programa que eleva un número x a la potencia y
INICIO
ENTERO x, y;
ENTERO i, total;
LEER x;
LEER
y;
i=1;
total=1;
MIENTRAS
(i<=y) HACER
total=total*x;
i=i+1
FIN;
ESCRIBIR total
FIN
TOKEN_KEY |
1 |
INICIO |
TOKEN_KEY |
3 |
ENTERO |
TOKEN_ID |
100 |
x |
TOKEN_KEY |
25 |
, |
TOKEN_ID |
100 |
y |
TOKEN_KEY |
23 |
; |
TOKEN_KEY |
3 |
ENTERO |
TOKEN_ID |
100 |
i |
TOKEN_KEY |
25 |
, |
TOKEN_ID |
100 |
total |
TOKEN_KEY |
23 |
; |
TOKEN_KEY |
15 |
LEER |
TOKEN_ID |
100 |
x |
TOKEN_KEY |
23 |
; |
TOKEN_KEY |
15 |
LEER |
TOKEN_ID |
100 |
y |
TOKEN_KEY |
23 |
; |
TOKEN_ID |
100 |
i |
TOKEN_KEY |
26 |
= |
TOKEN_NUM |
101 |
1 |
TOKEN_KEY |
23 |
; |
TOKEN_ID |
100 |
total |
TOKEN_KEY |
26 |
= |
TOKEN_NUM |
101 |
1 |
TOKEN_KEY |
23 |
; |
TOKEN_KEY |
13 |
MIENTRAS |
TOKEN_KEY |
34 |
( |
TOKEN_ID |
100 |
i |
TOKEN_KEY |
38 |
<= |
TOKEN_ID |
100 |
y |
TOKEN_KEY |
35 |
) |
TOKEN_KEY |
14 |
HACER |
TOKEN_ID |
100 |
total |
TOKEN_KEY |
26 |
= |
TOKEN_ID |
100 |
total |
TOKEN_KEY |
33 |
* |
TOKEN_ID |
100 |
x |
TOKEN_KEY |
23 |
; |
TOKEN_ID |
100 |
i |
TOKEN_KEY |
26 |
= |
TOKEN_ID |
100 |
i |
TOKEN_KEY |
31 |
+ |
TOKEN_NUM |
101 |
1 |
TOKEN_KEY |
2 |
FIN |
TOKEN_KEY |
23 |
; |
TOKEN_KEY |
16 |
ESCRIBIR |
TOKEN_ID |
100 |
total |
TOKEN_KEY |
2 |
FIN |
En la página web del laboratorio de Procesadores de Lenguaje hay disponible un enlace para que el alumno se descargue el fichero comprimido autocorreccion_lexico.zip. Este fichero contiene 15 programas escritos en ALFA y sus correspondientes 15 ficheros de salida que debe generar el programa prueba_lexico desarrollado en esta primera práctica. El alumno debe comparar las salidas que obtiene de su programa prueba_lexico con las salidas proporcionadas en el fichero autocorreccion_lexico.zip. Para realizar la comparación en Linux se puede utilizar el comando diff que compara el contenido de dos ficheros.
La evaluación de los conocimientos adquiridos por el alumno durante el desarrollo de esta primera práctica se hará mediante una prueba individual realizada en una sesión de laboratorio en los días que se detallan en la lista adjunta.
La
normativa de evaluación que se aplicará está publicada 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 prueba_lexico.
1: |
<programa> |
::= |
INICIO <declaraciones>
<funciones> <sentencias> FIN |
2: |
<declaraciones> |
::= |
<declaracion> |
3: |
|
| |
<declaracion>
<declaraciones> |
4: |
<declaracion> |
::= |
<clase>
<identificadores> ; |
5: |
<clase> |
::= |
<clase_escalar> |
6: |
|
| |
<clase_puntero> |
7: |
|
| |
<clase_vector> |
8: |
<tipo> |
::= |
ENTERO |
9: |
|
| |
LOGICO |
10: |
<clase_escalar> |
::= |
<tipo> |
11: |
<clase_puntero> |
::= |
<tipo> # |
12: |
|
| |
<clase_puntero> # |
13: |
<clase_vector> |
::= |
VECTOR <tipo> DE <constante_entera> |
14: |
|
| |
VECTOR <tipo> DE <constante_entera> POR
<constante_entera> |
15: |
<identificadores> |
::= |
<identificador> |
16: |
|
| |
<identificador> ,
<identificadores> |
17: | <funciones> | ::= | <funcion> <funciones> |
18: | | | ||
19: | <funcion> | ::= | FUNCION <tipo> <identificador> ( <parametros_funcion> ) INICIO <declaraciones_funcion> <sentencias> FIN |
20: | <parametros_funcion> | ::= | <parametro_funcion> <resto_parametros_funcion> |
21: | | | ||
22: | <resto_parametros_funcion> | ::= | ; <parametro_funcion> <resto_parametros_funcion> |
23: | | | ||
24: | <parametro_funcion> | ::= | <tipo> <identificador> |
25: | <declaraciones_funcion> | ::= | <declaraciones> |
26: | | | ||
|
<sentencias> |
::= |
<sentencia> |
28: |
|
| |
<sentencia>
;
<sentencias> |
29: |
<sentencia> |
::= |
<asignacion> |
30: |
|
| |
<condicional> |
31: |
|
| |
<bucle> |
32: |
|
| |
<lectura_escritura> |
33: |
|
| |
<liberacion> |
34: | | | <retorno> | |
35: | | | <seleccion> | |
36: | <seleccion> | ::= | SELECCIONAR ( <exp> ) <casos_seleccion> FIN |
37: | <casos_seleccion> | ::= | <casos_estandar> <caso_defecto> |
38: | <casos_estandar> | ::= | <caso_estandar> |
39: | | | <casos_estandar> <caso_estandar> | |
40: | <caso_estandar> | ::= | CASO <constante_entera> : <sentencias> |
41: | <caso_defecto> | ::= | DEFECTO <sentencias> |
42: | <retorno> | ::= | DEVOLVER <exp> |
43: |
<asignacion> |
::= |
<identificador> =
<exp> |
44: |
|
| |
<elemento_vector> =
<exp> |
45: |
|
| |
<acceso> =
<exp> |
46: |
|
| |
<identificador> =
RESERVAR |
47: |
|
| |
<identificador> =
<- <identificador> |
48: |
<elemento_vector> |
::= |
<identificador> [
<exp> ] |
49: |
|
| |
<identificador> [
<exp> , <exp> ] |
50: |
<condicional> |
::= |
SI <exp> ENTONCES <sentencias> FIN |
51: |
|
| |
SI <exp> ENTONCES <sentencias> SINO
<sentencias> FIN |
52: |
<bucle> |
::= |
MIENTRAS <exp> HACER <sentencias> FIN |
53: | | | DESDE <identificador> = <exp> HASTA <exp> HACER <sentencias> FIN | |
54: |
<lectura_escritura> |
::= |
LEER <identificador> |
55: |
|
| |
LEER <elemento_vector> |
56: |
|
| |
ESCRIBIR <exp> |
57: |
<liberacion> |
::= |
LIBERAR <identificador> |
58: |
<acceso> |
::= |
-> <identificador> |
59: |
|
| |
-> <acceso> |
60: |
<exp> |
::= |
<exp> + <exp> |
61: |
|
| |
<exp> - <exp> |
62: | | | <exp> / <exp> | |
63: |
|
| |
<exp> * <exp> |
64: |
|
| |
- <exp> |
65: |
|
| |
<exp> Y
<exp> |
66: |
|
| |
<exp> O
<exp> |
67: |
|
| |
NO <exp> |
68: |
|
| |
<identificador> |
69: |
|
| |
<constante> |
70: |
|
| |
( <exp> ) |
71: |
|
| |
( <comparacion> ) |
72: |
|
| |
<acceso> |
73: |
|
| |
<elemento_vector> |
74: | | | <identificador> ( <lista_exp> ) | |
75: | <lista_exp> | ::= | <exp> <resto_lista_exp> |
76: | | | ||
77: | <resto_lista_exp> | ::= | , <exp> <resto_lista_exp> |
78: | | | ||
79: |
<comparacion> |
::= |
<exp> ==
<exp> |
80: |
|
| |
<exp> != <exp> |
81: |
|
| |
<exp> <= <exp> |
82: |
|
| |
<exp> >= <exp> |
83: |
|
| |
<exp> < <exp> |
84: |
|
| |
<exp> >
<exp> |
85: |
<constante> |
::= |
<constante_logica> |
86: |
|
| |
<constante_entera> |
87: |
<constante_logica> |
::= |
VERDADERO |
88: |
|
| |
FALSO |
89: |
<constante_entera> |
::= |
<numero> |
90: |
<numero> |
::= |
<digito> |
91: |
|
| |
<numero>
<digito> |
92: |
<identificador> |
::= |
<letra> |
93: |
|
| |
<letra>
<cola_identificador> |
94: |
<cola_identificador> |
::= |
<alfanumerico> |
95: |
|
| |
<alfanumerico>
<cola_identificador> |
96: |
<alfanumerico> |
::= |
<letra> |
97: |
|
| |
<digito> |
98: |
<letra> |
::= |
a | b | ... | z | A | B
|...| Z |
99: |
<digito> |
::= |
0 | 1 | 2 | 3 | 4 | 5
| 6 | 7 | 8 | 9 |
C
:Entre
//
y el final de la línea.