Sie sind auf Seite 1von 4

Terrence Pratt: Programming Languages Design and Implementation, 2nd edition, Prentice Hall Pratt p.

.26 La SINTAXIS de un LP es la forma en la cual los programas son escritos. La SEMNTICA de un LP es el significado otorgado a los diferentes constructos sintcticos. Este significado tiene que ver con lo que sucede en tiempo de ejecucin. Ejemplo 1: Sea en Pascal la declaracin V: array [1..10] of real; Esta declaracin brinda la sintaxis de un vector de 10 elementos reales llamado V. La semntica de esta declaracin (el significado de la misma) es, por ejemplo: esta declaracin se coloca al comienzo de un subprograma para crear, en cada invocacin a ese subprograma, el vector mencionado, cuyo espacio ser liberado al terminar de ejecutarse el subprograma. Ejemplo 2: Analicemos una situacin en ANSI C. Sea la sentencia while. Su sintaxis es: while ( expresin ) sentencia Su semntica, segn el MROC, dice: la evaluacin de la expresin de control se realiza antes de cada ejecucin del cuerpo del ciclo. Entonces, el cuerpo del ciclo es ejecutado repetidamente hasta que el expresin sea nula (0, 0.0, etc). Ejemplo 3: En ANSI C, la semntica de while (2) 3; representa un ciclo infinito. Pratt p.345 Problemas en Semntica Problema 1: Definicin de Semntica El problema prctico Un manual de un LP debe definir el significado de cada construccin del lenguaje, tanto en forma aislada como en conjuncin con otras construcciones del lenguaje. Un lenguaje provee una variedad de diferentes constructos, y tanto el usuario del lenguaje como el implementador requieren una definicin precisa de la semntica de cada constructo. El programador necesita la definicin para escribir programas correctos y para ser capaz de predecir el efecto de la ejecucin de cualquier sentencia del programa. El implementador necesita la definicin para poder construir una implementacin correcta del LP. En la mayora de los manuales de los LPs la definicin de la semntica est dada en lenguaje natural. Comnmente, una produccin (o producciones) de una BNF son dadas para definir la sintaxis de un constructo, y luego unos prrafos en lenguaje natural y algunos ejemplos son dados para definir la semntica. Pratt p.317 Anlisis Semntico Completa el Anlisis Sintctico y, adems, puede producir el cdigo objeto (generalmente para una MV). El Anlisis Semntico se lleva a cabo a travs de un conjunto de rutinas, cada una de las cuales se ocupa de una actividad o de un constructo. Ejemplo 4: Las declaraciones de los arreglos pueden ser manejadas por una rutina semntica; las expresiones aritmticas por otra, etc. Una rutina semntica apropiada es llamada por el Parser cada vez que ste reconoce un constructo que debe ser procesado.

Pratt

Una rutina semntica puede actuar conjuntamente con otras rutinas semnticas para llevar a cabo una tarea determinada. Pratt p.318 Mantenimiento de la TS. Una TS es una estructura central en todo compilador. Una TS tpica contiene una entrada para cada identificador que existe en el programa fuente. El Scanner coloca el identificador detectado, pero el Anlisis Semntico (AS) tiene la responsabilidad fundamental despus de ello. En general, la TS no solo contiene a los identificadores sino que tambin contiene los atributos de cada uno de ellos: su clase (variable simple, arreglo, funcin, parmetro, etc.), tipo de los valores (entero, real, etc.), alcance, otra informacin que proveen las declaraciones (y definiciones), etc. El AS, a travs de sus diferentes rutinas, ingresa esta informacin en la TS a medida que procesa declaraciones, encabezamientos de funciones y sentencias del programa. Otras rutinas del AS utilizan esta informacin para construir, luego, cdigos ejecutables eficientes. - ----Otros Ejemplos de descripcin de la Semntica, segn Pratt: (a) Describa la semntica de la sentencia compuesta ANSI C: {i = 0; while (i < 20){ scanf("%s", cad); printf("cadena: %s\n", cad); i++; } } Respuesta: Despliega por pantalla 20 cadenas ingresadas por teclado, a razn de una cadena por lnea, con el formato cadena: seguida de la cadena que previamente fue ingresada por teclado. Al final, el cursor queda al comienzo de la siguiente lnea. O bien, Se ingresan 20 cadenas por teclado, a razn de una cadena por lnea. Por cada cadena ingresada, debajo de ella, se despliega por pantalla cadena: y la cadena previamente ingresada. Quedando el cursor al comienzo de la siguiente lnea .

(b) Describa la semntica de la sentencia compuesta ANSI C: { int a = 0; do printf("%d\n",++a); while(a < 20); } Respuesta: Despliega por pantalla los valores del 1 al 20, a razn de uno por lnea. El cursor queda al comienzo de la siguiente lnea.

(c) Describa la semntica de la sentencia compuesta ANSI C: { int b = 0; do printf("%d\n",b++); while(b < 40); } Respuesta: Despliega por pantalla los valores del 0 al 39, a razn de uno por lnea. El cursor queda al comienzo de la siguiente lnea.

(d) Defina la semntica de los siguientes definiciones/declaraciones en ANSI C: (1) typedef struct {int a; double b; } XX; Respuesta: Se declara a XX como el nombre de un tipo que es una estructura de dos campos: el primero int llamado a y el segundo double llamado b.

Pratt

(2) struct {int a; double b; } XX; Respuesta: Se define la variable XX como una estructura formada por dos campos: el primero int llamado a y el segundo double llamado b. (3) double mat[10][20]; Respuesta: Se define el arreglo bidimensional (o la matriz) llamado mat de 10 filas por 20 columnas, en donde cada elemento es double. (4) long a, b, c=0; Respuesta: Se definen tres variables de tipo long, lamadas a, b y c, donde la variable c comienza con el valor 0. (e) Defina la semntica de la siguiente funcin en ANSI C: int XX (char *s, char *t) { if (strlen(s) == strlen(t)) return 1; return 0; } Respuesta: Retorna 1 si las longitudes de las cadenas dadas son iguales y 0 si no lo son. (f) Describa la Semntica de la siguiente funcin ANSI C: int XX (char *s, char *t) { if (strcmp(s,t) return 1; return 0; } Respuesta: Retorna 1 si las dos cadenas dadas son iguales; cosa contrario, retorna 0. (g) Sea la sentencia ANSI C: printf ("%d", AS(24)); Describa la semntica de esta sentencia teniendo en cuenta lo que realiza la funcin: int AS (int x) { return x-4; } Respuesta: Muestra (o despliega) por pantalla el valor 20 y el cursor queda a continuacin en la misma lnea. (h) Sea la siguiente sentencia compuesta ANSI C: { int i=0, t=10; while (i < 5) { printf ("%d\n", MM(t)); t+=4; i++;} } Describa la semntica de esta sentencia compuesta teniendo en cuenta lo que realiza la funcin: int MM (int x) { return x*2; }

Pratt

Sugerencia: Para poder describir la Semntica de esta sentencia compuesta, primero haga una prueba de escritorio para comprender qu es lo que hace la sentencia compuesta. Respuesta: Muestra (o despliega) por pantalla los valores 20, 28, 36, 44 y 52, a razn de uno por lnea, y el cursor queda al comienzo de la siguiente lnea. (i) Describa la semntica de la siguiente funcin ANSI C: float SS (void) { int i; float g25, cc=0.0; for (i=0; i < 20; i++) { scanf("%f", &g25); cc+=g25; } } Respuesta: Retorna la suma de los primeros 20 valores reales ingresados por teclado. (j) Describa la Semntica de la siguiente funcin ANSI C: long XX (long w, long z) { if (w > z) return w; return z; } Aclaracin: los valores de w y de z siempre sern mayores a cero. Respuesta: Dados dos valores enteros, retorna el mayor de ellos.

Das könnte Ihnen auch gefallen