You are on page 1of 26

GUA DE TRABAJOS PRCTICOS

Sintaxis y Semntica de Lenguajes


Dpto. de Ing. en Sistemas

ATENCIN
Al finalizar el semestre se deber subir al Aula Virtual, mediante el enlace
previsto a tal efecto, un archivo comprimido ZIP o RAR (ver **), conteniendo los
ejercicios resueltos en las clases prcticas de acuerdo a lo siguiente:
- Cada uno de los archivos fuente con el cdigo de los programas en C y JS
desarrollados durante las prcticas. El nombre de los archivos deber
comenzar con C o JS seguido del nmero de ejercicio al que corresponde.
- Cada uno de los archivos correspondientes a los diagramas de grafos
(rboles, autmatas, diagramas sintcticos u otros tipos de esquemas de
grafos) generados con la herramienta JFLAP. El nombre de cada archivo
fuente ser el correspondiente al nmero de ejercicio.
- Un nico archivo en formato .doc, .docx, .pdf o .txt, conteniendo las
respuestas a cuestiones planteadas no comprendidas en los casos
anteriores, las cuales se deben identificar con el nmero de ejercicio al que
corresponden.
** El nombre del archivo comprimido deber estar formado por las letras
TP seguidas del nmero de legajo del alumno **
SINTAXIS Y SEMNTICA DE LENGUAJES
Departamento de Ingeniera en Sistemas
Universidad Tecnolgica Nacional - Facultad Regional Mendoza

NDICE

1. SINTAXIS Y SEMNTICA DE LENGUAJES DE PROGRAMACIN ...................................... 3

1.1 Gramtica y lenguajes formales ................................................................................... 3

1.2 Notaciones para especificar sintaxis ........................................................................... 5

1.3 Mquinas secuenciales y autmatas ............................................................................ 6

1.4 rboles de anlisis ........................................................................................................... 9

2. PROCESO DE TRADUCCIN ............................................................................................... 12

2.1 Proceso de Compilacin................................................................................................ 12

2.2 Traduccin de la semntica de datos ........................................................................ 16

2.3 Traduccin de la semntica de control ..................................................................... 20

Sintaxis y Semntica de Lenguajes: Gua de trabajos prcticos 2


SINTAXIS Y SEMNTICA DE LENGUAJES
Departamento de Ingeniera en Sistemas
Universidad Tecnolgica Nacional - Facultad Regional Mendoza

1. SINTAXIS Y SEMNTICA DE LENGUAJES DE PROGRAMACIN

1.1 GRAMTICA Y LENGUAJES FORMALES

1. Sea el vocabulario V={1, 2}. Indique cinco de las cadenas pertenecientes a V* y V+.

2. Sean los vocabularios V={i,x} y W={i,v,c}. Defina por extensin:


a) V3 b) W* c) V.W

3. Sea { 000 010, 10 01 } para la palabra 1010, obtenga las derivaciones a derecha.

4. Sea { 000 010, 10 01 } para la palabra 1000, obtenga las derivaciones a izquierda.

5. D cuatro ejemplos diferentes de cadenas generadas por la gramtica:


G = (t, n, S, P)
t = {S} n = {a, b}
S = S P = { S -> aSb, S -> bSa, S -> SS, S -> }

6. Defina los conjuntos P de la gramtica de G = { {S, A, B, C}, {0, 1}, S, P } que reconozca:
001010

7. Defina los conjuntos P de la gramtica de G = { {S, A, B, C}, {0, 1}, S, P } que reconozca:
000101

8. Definir las reglas de una gramtica Tipo 2 en base a la especificacin dada, que
reconozca el lenguaje:
L1 = {wncwn / w {a, b} n > 0}
G1 = ({A, S}, {a, b, c}, P, S)

9. Defina las reglas de produccin para el lenguaje: L1 = { an c bm / n > 0 y m 0 }

10. Para la especificacin dada dibuje el rbol de derivacin para: a a c b b

P = { e0 a e1, e1 a e1 | c e2, e2 b e2 }

Sintaxis y Semntica de Lenguajes: Gua de trabajos prcticos 3


SINTAXIS Y SEMNTICA DE LENGUAJES
Departamento de Ingeniera en Sistemas
Universidad Tecnolgica Nacional - Facultad Regional Mendoza

11. Sea la cudrupla es G = ({S,A,B}, {0, 1}, P, S) con el siguiente conjunto de producciones,
indique 3 cadenas vlidas diferentes y dibuje los respectivos rboles de derivacin:
P : { S -> A1B, A -> 0A | , B -> 0B | 1B | }

12. Dibuje el rbol de derivacin para la cadena z = (x + y) * z correspondiente a la siguiente


gramtica:
ASSIGN -> ID = EXPR
ID -> x | y | z
EXPR -> ID + EXPR | EXPR * ID | ( EXPR) | ID

13. Verificar si la siguiente gramtica, genera cadenas ambiguas, en cuyo caso dar los
ejemplos.
G = ({a, +, *, (, )}, {S}, S, P)
P = {S := a, S := S + S, S := S * S, S := S}

14. Construya una gramtica regular no ambigua que genere todas las cadenas de 0 y 1 en
las cuales los 0, si aparecen, lo hacen en grupos individuales de a tres.
Ej. cadenas que pertenecen al lenguaje Ej. cadenas que NO pertenecen al lenguaje
1,11111, 000, 1000, 1110001000 0, 00, 11000011, 000000, 000100

15. Escriba las reglas de produccin para la gramtica G1, no ambigua, que reconoce el
lenguaje L1. G1 = ({A}, {a, b, c}, P, S1) L1 = {wcwR / w {a | b} y R > 0}

16. Completar las reglas de produccin para la gramtica.


Sea G = ({A, B}, {a}, P, S) una gramtica regular lineal a derecha que genera L = {a2n / n 0}
S S ?
A aB A ?
B ?

17. Completar las reglas de produccin para la gramtica.


Sea G = ({A, B, C}, {0, 1, 2, 3}, P, S) que genera: L = {0i 1i+k 2k 3n+1 / i, k, n 0 }
S ABC S ?
S BC S ?
A 0A1 A ?
B 1B2 B?
C 3C C ?

Sintaxis y Semntica de Lenguajes: Gua de trabajos prcticos 4


SINTAXIS Y SEMNTICA DE LENGUAJES
Departam
mento de Ingen
niera en Sistem
mas
Univerrsidad Tecnolgica Nacional - Facultad Reggional Mendozaa

1.2 N
NOTACION
NES PARA
A ESPECIF
FICAR SIN
NTAXIS

18.
Dibuje el diagrama
d s
sintctico eq
quivalente:
ModDec
claration ULE ident [priorit
n -> MODU ty] ; {Im
mport} Bl
lock iden
nt.

19.
Exprese ell equivalen
nte del siguiiente diagrrama sintcctico, en nootacin EBN
NF:

Declar
ration

20. D
Dibuje el dia
agrama sin
ntctico equ
uivalente:
<list>
> ::= <al
lternativ
ve> { | <alterna
ative> }[
[ <else> ]

21. Ex
Exprese el eq
quivalente del ma sintcticoo, en notacin EBNF y BNF:
d siguiente diagram

22.
Re-escriba
a la expresiin en notaciones pre y post fija. Dibuje el
rbol de eva
aluacin.
(x1 + x + (x4 / x5 + x6)
x2) x3

23. Re-escriba la
as expresion
nes en nota
aciones pre y post fija. Dibuje el
rbol de eva
aluacin.
a + b * c / d
a * (b
b + c / 3)
3 * d k
(b / 2 + b * b 4 * x 2 * y)
y / (2 + a)

Sintaxis y Semntica de Lenguajes: Gu


ua de trabajos prcticos
p 5
SINTAXIS Y SEMNTICA DE LENGUAJES
Departam
mento de Ingen
niera en Sistem
mas
Univerrsidad Tecnolgica Nacional - Facultad Reggional Mendozaa

1.3 M
MQUINAS
S SECUEN
NCIALES Y AUTM
MATAS

Al usarr la herram
mienta yEd Graph Ediitor, en los casos que ccorresponda
e
especificar estados fin
nales, indica
arlos con lnea ms grruesa.

24.
Para el sig
guiente au
utmata dettermine la expresin normal (reegular) y su
u equivalen
nte
en notacin
n BN
NF:

25.
Para la siguiente
s e
expresin: A.((A | B).C)*.C construya
a el AEFD
D. Realice la
desccripcin en forma grffica, funcioonal y tabullar.

26. Seea la expreesin regular: a*.b.a**.b.(a|b)* construya


c e AEFD. R
el Realice la descripcin
d en
form
ma grfica, funcional y tabular.

27. D
Determine la
a expresin regular pa
ara:
{ S ->
- b A, S ->
> a B, A ->
> a S, B -> b S }

28.
Describa e autmata
el a para la siiguiente gra
amtica G = { {S, A, B
B, C}, {x, y}, S, P } dond
de
P = { S -> xA, S -> yB, A ->
> xC, A -> yA,
y A -> , B -> xC, B -> yB, B ->
> , C -> }

29. Dada la sigu


D uiente especcificacin dibuje
d de au
utmata: L1
1 = {ancbm/ n > 0 y m 0 }
M = { Q, , f, e0, F }
Q = { e0, e1, e2e }
= { a, b, c }
ei = e0
F = { e2 }

30. Obtenga eel AFD eq


quivalente para el AFFND, dibu uje el autmata AFD D indicandoo a
d AFND, representa
culles nodos del a cada nodo
o. Describa
a la tabla ccompleta de
e transicion
nes
P(Q
Q).

Sintaxis y Semntica de Lenguajes: Gu


ua de trabajos prcticos
p 6
SINTAXIS Y SEMNTICA DE LENGUAJES
Departamento de Ingeniera en Sistemas
Universidad Tecnolgica Nacional - Facultad Regional Mendoza

31. Obtenga el AFD equivalente para el AFND, dibuje el autmata AFD indicando a cules
nodos del AFND original, representa cada nodo.

32. Obtenga el autmata equivalente mnimo para:

33. Obtenga el autmata equivalente mnimo. Indicar la secuencia de conjuntos particin


obtenidos y dibujar el autmata resultante.

34. Para el siguiente AFND, encuentre el AFD equivalente, dibuje el autmata AFD
indicando a cules nodos del AFND original, representa cada nodo.

Sintaxis y Semntica de Lenguajes: Gua de trabajos prcticos 7


SINTAXIS Y SEMNTICA DE LENGUAJES
Departam
mento de Ingen
niera en Sistem
mas
Univerrsidad Tecnolgica Nacional - Facultad Reggional Mendozaa

35. O
Obtenga el autmata
a equivalentee mnimo. Indicar la
a secuencia
a de conjun
ntos particin
obteenidos y dibbujar el auttmata resu
ultante.

nvencin a usar con


Con n los AP: los
l smbolos en la pila se inse
ertan en se
entido
36.
Definir el APD recon
nocedor para el siguien
nte lenguajje:
L = { a2n bn / n >= 0 }

37. Pa
ara el sigu
uiente autmata de pila dar un ejemplo de
d secuencia aceptada
a (de longittud
may
yor a 4).

38.
Definir loss APD equiivalentes qu
ue reconoce
en L = {1n0n-1
n con n > 0
0} por:
a) va
aciado de piila.
b) alcance del estado
e finall.
c) va
aciado de piila y alcancce del estad
do final.

39. D
Definir los APD
A alentes que reconocen L = { Xn Yn : n 0 } por:
equiva
a) va
aciado de pila.
b) allcance del estado
e finall.
c) va
aciado de piila y alcancce del estad
do final.

40. Defina el AP
D PD que reconoce el lenguaje
l a la siguiente
L = { xR / R es par > 0 } para
espeecificacin:

Sintaxis y Semntica de Lenguajes: Gu


ua de trabajos prcticos
p 8
SINTAXIS Y SEMNTICA DE LENGUAJES
Departamento de Ingeniera en Sistemas
Universidad Tecnolgica Nacional - Facultad Regional Mendoza

A = ( e, , Q, a0, q0, F, f, g )
{x}: alfabeto de entrada {x, #}: alfabeto de la pila
{q0, q1, q2}: conjunto de estados #: smbolo inicial de la pila
q0: estado inicial {q2}: estado final

1.4 RBOLES DE ANLISIS

41. En base al documento con las reglas de sintaxis del lenguaje C (C-ANSI.pdf), dibuje los
rboles de anlisis para:
while (x < y)
if (x % 2 == 0) x = x + 1;
else x = x + 2;

42. En base al documento con las reglas de sintaxis del lenguaje C (C-ANSI.pdf), dibuje los
rboles de anlisis para los siguientes enunciados:
for (k = 1; k < 10; k++) {
if ( k < 5) j++;
else j += 2;
}

Los siguientes ejercicios deben resolverse usando la aplicacin Java


GoldParserGenerator. Para esto seguir los siguientes pasos:
1. Descargar el archivo y descomprimirlo.
2. En el directorio o carpeta donde se instale, escribir el texto del cdigo a analizar en el archivo
codigo.c o codigo.js, segn el caso.
3. Modificar el archivo config.dat:
a. en la primera lnea colocar el nombre del archivo a utilizar C-ANSI.cgt o Javascript.cgt,
segn el caso.
b. En la segunda lnea escribir el nombre del archivo fuente a analizar: codigo.c o codigo.js,
segn el caso.
4. Escribir en la consola el comando: java -jar GoldParserGenerator.jar > salida.txt
5. En el archivo salida.txt quedar el texto resultante del proceso, indicando en la ltima lnea si fue
exitoso (con OK) o si hubo ERROR. En caso de error analice la secuencia de procesamiento,
descubra dnde ocurri, corrija el archivo fuente respectivo y verifique nuevamente.

43. Escriba ejemplos en C para los generadores indicados, en base a la gramtica en C-


ANSI.pdf, y verifique su correcto anlisis utilizando la aplicacin GoldParserGenerator.

<Expr> <Op Assign> <Stm>

<Var Decl> <Func Decl>

Sintaxis y Semntica de Lenguajes: Gua de trabajos prcticos 9


SINTAXIS Y SEMNTICA DE LENGUAJES
Departamento de Ingeniera en Sistemas
Universidad Tecnolgica Nacional - Facultad Regional Mendoza

44. Escriba dos ejemplos diferentes en JavaScript para los generadores indicados, en base a
la gramtica en Javascript.pdf, y verifique su correcto anlisis utilizando la aplicacin
GoldParserGenerator.

<Program> <Function Declaration> <Variable Statement>

45. Dibuje el rbol de derivacin para las siguientes expresiones, luego segn las
declaraciones y asignaciones de valores indique los resultados considerando la secuencia en
la que aparecen.
char * s = {"0123456789"}, * c;
int * p;
long * q;
c = (s + 3);
p = (int *) s;
q = (long *) s;
Analizar:
*((char*)q);
*(++c);
*c++;
++*s;
!(!(*c));
~(*(c + 1));

46. Dibuje el rbol de derivacin para las siguientes expresiones, luego segn las
declaraciones y asignaciones de valores indique los resultados considerando la secuencia en
la que aparecen.
int a = 1, b = 2, c = 7, d = -4;
float x = 1, y = 2.5, z = 0.3;
unsigned char m = 'B', p = 64, r = '1';
Analizar:
a > c && !(x != y) || m < -- p
++b - b++
(c++ * --b)
m += b + 5
(!p && m) + r
x / c * y + 3.5 - d % 3
b>c>d
b=c?2:4

Sintaxis y Semntica de Lenguajes: Gua de trabajos prcticos 10


SINTAXIS Y SEMNTICA DE LENGUAJES
Departamento de Ingeniera en Sistemas
Universidad Tecnolgica Nacional - Facultad Regional Mendoza

47. Eliminar la recursividad a izquierda de la gramtica.


EE+T
ET
TT*F
TF
F (E)
F id

48. Haciendo uso de las herramientas Flex/Bison, desarrollar un analizador lxico


(scanner) y un analizador sintctico (parser) para la gramtica que se muestra. Obtener el
programa ejecutable que tome como input un archivo de texto con un ejemplo de cdigo
fuente que corresponda al lenguaje y lo someta a las dos primeras fases del proceso de
traduccin. Como resultado el analizador debe mostrar la tabla de lexemas-tokens obtenida
por el scanner y el rbol de derivacin generado por el parser, o el error en caso de
producirse alguno de orden lxico o sintctico durante el proceso de anlisis.
GRAMTICA DEL LENGUAJE
rutina ::= identifier parameter_list
parameter_list ::= "(" defparameter {"," defparameter}* |
("&" identifier { "," "&" identifier}*
defparameter ::= parameter ["=" expression]
identifier ::= letter {letter | digit | "_"}*
parameter ::= identifier | "(" sublist ")"
expression ::= conditional_expression | lambda_form
letter ::= lowercase | uppercase
digit ::= "0"|"1"|...|"9"
identifier ::= (letter) {letter | digit | "_"}*
sublist ::= parameter ("," parameter)*
conditional_expression ::= "or_test" | "and_test"
lambda_form ::= "lambda"
lowercase ::= "a"|"b"|...|"z"
uppercase ::= "A"|"B"|...|"Z"
EJEMPLOS:
algo_1(alfa = or_test, Beta = lambda) // vlido
algo_1(alfa = or_test, &Beta) // invlido
algo_1(alfa = or_test, _Beta = lambda) // invlido

Sintaxis y Semntica de Lenguajes: Gua de trabajos prcticos 11


SINTAXIS Y SEMNTICA DE LENGUAJES
Departamento de Ingeniera en Sistemas
Universidad Tecnolgica Nacional - Facultad Regional Mendoza

2. PROCESO DE TRADUCCIN

Esta parte de la gua presenta una serie de problemas, planteados principalmente en


los lenguajes C/C++ (compilado) y Javascript (scripting-interpretado), con el fin de
analizar situaciones donde se producen errores de sintaxis y/o semntica, debidos a
una codificacin errnea de los programas.
No debe retipear el cdigo de los programas en C/C++, para probar su funcionamiento,
directamente copie y pegue cada caso, en el editor del lenguaje. Para los programas en
Javascript, copie los cdigos en un archivo abierto con un editor que sea para texto
ASCII, luego grbelos con el nombre prueba.htm, entonces con un navegador abra el
archivo prueba.html.

2.1 PROCESO DE COMPILACIN

Los errores que aparecen en algunos de los siguientes programas pueden ocurrir durante el
proceso de compilacin o interpretacin segn el lenguaje, algunos no se detectan hasta la etapa
de ejecucin y otros nunca se detectan, pero los programas muestran resultados errneos.
49. Verifique si compilan y ejecutan correctamente los siguientes programas, luego corrija el
error y pruebe de nuevo el programa (verifique que el resultado que muestran es el correcto).
Califique los errores en de tipo lxico, sintctico o semntico.

#include<iostream> #include <iostream>


using namespace std; using namespace std;
#define uno 1 void foo(){
#define dos 2 int i;
int a; cout << i++<< endl;
a = uno; }
int main() { int main() {
a = dos; int j;
} for (j = 0; j < 10; j++) foo();
}

50. Verifique si compilan y ejecutan correctamente los siguientes programas, luego corrija el
error y pruebe de nuevo el programa (verifique que el resultado que muestran es el correcto).
Califique los errores en de tipo lxico, sintctico o semntico.
#define VERSIN 1 #include <iostream>
#include <iostream> using namespace std;
using namespace std; int an[4] = { 1, 2, 3, 4 };
char *ss( char *s ) { int sum( int a[4] ) {
return s; int limit = sizeof(int)*4 / sizeof(int); result = 0;
} for( int i = 0; i < limit; i++ )
int main(){ result += a[i];
if (VERSIN > 0) return result;
cout <<"Hello "<<ss("world")<< endl; }
} int main(){
cout << sum( an ) << endl;
}

Sintaxis y Semntica de Lenguajes: Gua de trabajos prcticos 12


SINTAXIS Y SEMNTICA DE LENGUAJES
Departamento de Ingeniera en Sistemas
Universidad Tecnolgica Nacional - Facultad Regional Mendoza

51. Analice el siguiente programa, corrija el error que tiene y verifique su funcionamiento.

#include <iostream>
using namespace std;
#include <malloc.h>
typedef const char *PtrChar;
typedef PtrChar *PtrPtrChar;
PtrPtrChar copia(PtrChar a, PtrChar b) {
PtrPtrChar p = (PtrPtrChar) malloc(sizeof(PtrChar) * 2);
p[0] = a;
p[1] = b;
return p;
}
int main() {
PtrPtrChar mc = copia( "Novedades", "Mayormente" );
PtrPtrChar hny = copia( "Similaridad", "Algunas veces" );
cout << mc[0]<< mc[1]<< endl;
cout <<hny[0], hny[1] << endl;
}

52. Analice lo que ocurre en cada caso, observando los mensajes desde la consola de
errores, en cada caso corrija el error y pruebe de nuevo (F5 recarga la pgina en el
navegador luego de ser modificada).

<HTML> <HTML>
<HEAD> <HEAD>
<TITLE>Pruebas JS</TITLE> <TITLE>Pruebas JS</TITLE>
<SCRIPT LANGUAGE="JAVASCRIPT"> <SCRIPT LANGUAGE="JAVASCRIPT">
Nombre = "La salida es: "; function EscribeTitulo(t){
alert("Hola, este es un programa de prueba"); alert(t)
x = 10; }
y = x * x; </SCRIPT>
alert(nombre + y); </HEAD>
</SCRIPT> <BODY onLoad="EscribeTitulo(Ttulo de la
pgina)">
</HEAD>
<p>Pruebas</p>
<BODY>
</BODY>
<p>Pruebas</p>
</HTML>
</BODY>
</HTML>

Sintaxis y Semntica de Lenguajes: Gua de trabajos prcticos 13


SINTAXIS Y SEMNTICA DE LENGUAJES
Departamento de Ingeniera en Sistemas
Universidad Tecnolgica Nacional - Facultad Regional Mendoza

53. Analice lo que ocurre en cada caso, observando los mensajes desde la consola de errores,
en cada caso corrija el error y pruebe de nuevo (F5 recarga la pgina en el navegador luego
de ser modificada).
<HTML> Por qu no muestra 15?
<HEAD> <html>
<TITLE>Pruebas JS</TITLE> <head>
<SCRIPT LANGUAGE="JAVASCRIPT"> <title>Un ejemplo</title>
function multiplicar(x, y) { <script language="JavaScript">
var w; function llamar(){
while (x =< y) x++; var x, y;
return w y = 3;
} x = 12;
function ver(){ y =+ x;
alert(multiplicar(2, 9)); alert(y);
} }
</SCRIPT> </script>
</HEAD> </head>
<BODY onLoad='ver()'> <body onLoad="llamar()">
</BODY> <p>Llamador</p>
</HTML> </body>
</html>

54. Las expresiones regulares son patrones que permiten expresar coincidencias con
combinaciones de caracteres dentro de cadenas de texto. Muchos lenguajes modernos
incluyen evaluadores de expresiones regulares, como por ejemplo JS o Java. Verifique el
funcionamiento del siguiente programa JS, asignando a la variable la_expre (reemplace la
lnea punteada), una de las siguientes expresiones, y determine cules son los patrones de
cadenas que son vlidos como entrada para cada caso:
/^(.+\@.+\..+)$/
/(^[0-9\s\+\-])+$/

<html>
<head>
<title>Un ejemplo</title>
<script language="JavaScript">
function expresion(){
var la_expre = ;
var texto = prompt("Valor: ");

if ( la_expre.test(texto) )
alert('La cadena es vlida');
else
alert('La cadena NO es correcta');
}
</script>
</head>
<body onLoad="expresion()">
<p>Validador de expresiones regulares </p>
</body>
</html>

Sintaxis y Semntica de Lenguajes: Gua de trabajos prcticos 14


SINTAXIS Y SEMNTICA DE LENGUAJES
Departamento de Ingeniera en Sistemas
Universidad Tecnolgica Nacional - Facultad Regional Mendoza

55. Analice la siguiente versin del programa, en la cual se quieren copiar las cadenas de
caracteres que se pasan como argumento a la funcin copia, corrija el error semntico que
tiene y verifique su funcionamiento. Explique por qu la versin anterior del programa s
funcionaba y qu habra que corregir para que el programa funcione correctamente.

#include <iostream>
using namespace std;
#include <malloc.h>
#include <string.h>
typedef char *PtrChar;
typedef PtrChar *PtrPtrChar;
PtrPtrChar copia(PtrChar a, PtrChar b) {
PtrPtrChar p = (PtrPtrChar) malloc(sizeof(PtrChar) * 2);
strcpy(p[0], a);
strcpy(p[1], b);
return p;
}
int main() {
PtrPtrChar mc = copia( "Novedades", "Mayormente" );
PtrPtrChar hny = copia( "Similaridad", "Algunas veces" );
cout << mc[0], mc[1] << endl;
cout << hny[0], hny[1] << endl;
return 0;
}

Sintaxis y Semntica de Lenguajes: Gua de trabajos prcticos 15


SINTAXIS Y SEMNTICA DE LENGUAJES
Departamento de Ingeniera en Sistemas
Universidad Tecnolgica Nacional - Facultad Regional Mendoza

2.2 TRADUCCIN DE LA SEMNTICA DE DATOS

Los errores que aparecen en los siguientes programas, en general se deben a interpretaciones
errneas de la semntica de datos de los enunciados, debido a que se han cometido errores al
escribir los programas. Suponer los tamaos 1/4/4/8/8 para los tipos char/int/float/
long/double.

56. Verifique si compilan y ejecutan correctamente los siguientes programas, luego corrija el
error y pruebe de nuevo el programa (verifique que el resultado que muestran es correcto).

#include <iostream> #include <iostream>


using namespace std; using namespace std;
int cubo(unsigned int p){ struct pumpkin { int nose:1, eyes:2; } p = { 1, 2 };
int n; int f(){
n = p * p * p; if( p.nose > 0 && p.eyes > 1 ) return 1;
return n; else return 0;
} }
int main(){ int main(){
int n; if( f() ) cout << "nose and eyes\n";
unsigned int p = 31489; else cout << "malformed\n";
n = cubo(p); return 0;
cout <<"El cubo es:<< n<< endl;
}
}

57. Verifique si compilan y ejecutan correctamente los siguientes programas, luego corrija el
error y pruebe de nuevo el programa (verifique que el resultado que muestran es correcto).

Debera mostrar 1. Muestra: 0.286797199079244D-009. Re-escrbalo


en C++ y JS, luego compare resultados.
<HTML>
<HEAD> program uno ! programa en Fortran 90
<TITLE>Pruebas JS</TITLE> implicit none
<SCRIPT call compara()
LANGUAGE="JAVASCRIPT"> stop
function compara(){ contains
var x = 0.333333333333333, y = 1/3; subroutine compara() ! anidada en uno
alert(x + " , " + y); integer :: k
if (x == y) real(kind=8) :: x, y ! equivale a double
alert(1); x = 1.0
else y = 3.0
alert(0); do k = 1, 20 ! es como un for
} x=x/y
</SCRIPT> end do
</HEAD> write(*, *) x ! es como un cout
<BODY onLoad=compara()"> return
</BODY> end subroutine compara
</HTML> end program uno

Sintaxis y Semntica de Lenguajes: Gua de trabajos prcticos 16


SINTAXIS Y SEMNTICA DE LENGUAJES
Departamento de Ingeniera en Sistemas
Universidad Tecnolgica Nacional - Facultad Regional Mendoza

58. Analice y pruebe ambos programas, explique los resultados obtenidos:

function calcula(){ function calcula(n, m) {


var x = new Array(); a = 1;
for (i = 0; i < 5; i++) x[i] = i * 2; if (n > m)
alert(x); b = 2;
for (i = 5; i < 10; i++) x[i] = i * 2; c = 3 + b;
alert(x); d = c + a;
} e = d * c;
alert(e);
Verificar para la llamada: calcula(23) }
Verificar para las llamadas:
calcula(4, 12)
calcula()
calcula(4, 2)

59. Verifique el funcionamiento de ambos programas y explique los resultados obtenidos.

#include <iostream> #include <iostream>


using namespace std; using namespace std;
int main() { int main() {
struct foo { struct foo {
int i; int i;
}; };
foo x = {3}; foo x = {3};
foo y = x; foo *y = &x;
x.i = 4; x.i = 4;
cout <<-<< y->i<< endl;
cout <<-<< y.i<< endl;
}
}

60. Suponiendo la direccin de base 1000 para alfa indique:


union VALOR { El tamao de en bytes de los objetos de datos alfa y x.
char a[10];
Forma de acceso al miembro 'b' del primer elemento de 'c'.
double b;
}; Direccin de memoria del 2do. elemento de 'a',
struct DATO { correspondiente al 2do. elemento de 'c'.
int a; Cmo asignar a x la referencia a un objeto DATO.
double b;
union VALOR c[10];
float d;
char e;
};
DATO alfa, *x;

Sintaxis y Semntica de Lenguajes: Gua de trabajos prcticos 17


SINTAXIS Y SEMNTICA DE LENGUAJES
Departamento de Ingeniera en Sistemas
Universidad Tecnolgica Nacional - Facultad Regional Mendoza

Suponiendo la direccin de base 500 para x. Indicar la direccin de memoria de cada miembro
de datos. Indicar la sintaxis para asignar un valor a cada miembro.
union COD {
long a;
char b[6];
};
struct CUOTA {
int *nro;
float monto;
};
struct PAGO {
COD id;
char nomb[30];
CUOTA *c;
};
PAGO x;

61. Responda las siguientes preguntas, para las definiciones y asignaciones que se indican.
Luego verifique sus respuestas usando el compilador, usando el debuger para verificar las
direcciones de memoria.
struct A { Cul es el tamao en bytes de t?
int x;
Si se hacen las asignaciones y luego se recupera t.m.z.x qu valor
long y;
se obtiene ?
};
union B { Suponiendo que la direccin de t es 1000:
long w; cul es el valor de la direccin de t.m.z.y ?
struct A z;
}; cul es el valor de la direccin de t.p.y ?
struct C { cul es el valor de la direccin de t.m.w ?
union B m;
struct A p; Si hace t.p = t.m.z y luego se recupera t.p.x qu valor se obtiene?
} t;
t.m.w = 10;
t.m.z.x = 10;
t.m.z.y = 12;
t.p.x = 15;
t.p.y = 21;

62. Si se declara un arreglo bidimensional X (organizado por fila/columna) de enteros


(tamao 4 bytes), con rango de subndices [1..5, -1..4], cuya direccin base es 200, indicar:
cantidad total de elementos espacio reservado para X en bytes
espacio dimensional M0 espacio dimensional M1
OV direccin X[2, 1]

Sintaxis y Semntica de Lenguajes: Gua de trabajos prcticos 18


SINTAXIS Y SEMNTICA DE LENGUAJES
Departamento de Ingeniera en Sistemas
Universidad Tecnolgica Nacional - Facultad Regional Mendoza

63. Para la siguiente declaracin en un lenguaje que utiliza enteros de 4 bytes, donde la
direccin base es 350, calcular los valores que se solicitan.
X is array [-3..4, 5..12, 0..4] of integer;
cantidad total de elementos espacio reservado para X en bytes
espacio dimensional M0 espacio dimensional M1
espacio dimensional M2 OV
direccin X[ -1, 6 , 0]

Sintaxis y Semntica de Lenguajes: Gua de trabajos prcticos 19


SINTAXIS Y SEMNTICA DE LENGUAJES
Departamento de Ingeniera en Sistemas
Universidad Tecnolgica Nacional - Facultad Regional Mendoza

2.3 TRADUCCIN DE LA SEMNTICA DE CONTROL

En los programas donde aparecen errores, en general se deben a interpretaciones errneas de la


semntica de control de los enunciados, relativos el mbito de datos y/o enunciados en los
subprogramas, porque se han cometido errores al escribir los programas.
64. Verifique el funcionamiento de ambos programas y explique los resultados obtenidos.
<HTML> <HTML>
<HEAD> <HEAD>
<TITLE>Pruebas JS</TITLE> <TITLE>Pruebas JS</TITLE>
<SCRIPT LANGUAGE="JAVASCRIPT"> <SCRIPT LANGUAGE="JAVASCRIPT">
var x = 0; var x = 0;
function calcula(){ function calcula(){
var x = 2; x = 2;
recalcula(); recalcula();
} }
function recalcula(){ function recalcula(){
alert(x); alert(x);
} }
</SCRIPT> </SCRIPT>
</HEAD> </HEAD>
<BODY onLoad=calcula()"> <BODY onLoad=calcula()">
</BODY> </BODY>
</HTML> </HTML>

65. Verifique el funcionamiento del programa y explique los resultados obtenidos.

#include <iostream>
using namespace std;
int count( char *buf, char letter ) {
int n = 0;
char *p;
for ( p = buf; *p; p++ ) if ( *p == letter ) n++;
return n;
}
int main() {
char *p = "visualizacion";
if( p ) ; else cout <<"\nCount:"<< count( p, 'e' )<< endl;
}

66. Implemente el programa, verifique el funcionamiento y explique los resultados obtenidos.

var x = 0;
function calcula(){
x = 2;
recalcula();
}
function recalcula(){
alert(x);
}

Sintaxis y Semntica de Lenguajes: Gua de trabajos prcticos 20


SINTAXIS Y SEMNTICA DE LENGUAJES
Departamento de Ingeniera en Sistemas
Universidad Tecnolgica Nacional - Facultad Regional Mendoza

67. Implemente el programa, verifique el funcionamiento y explique los resultados obtenidos.

function calcula(){
var x = new Array();
for (i = 0; i < 5; i++) x[i] = i * 2;
alert(x);
for (i in x) alert(i * 2);
}

68. Analice el siguiente programa, luego agregue un par de llaves para agrupar bloques de
modo tal que se muestre el valor 2.

function calcula(n, m){


var x;
if (n > m)
x = 0;
if (n < m)
x = 1;
else
x = 2;
alert(x);
}

69. Analice el siguiente programa, corrija el/los error/es y verifique su funcionamiento.

#include <iostream>
using namespace std;
#include <string.h>
enum type { H=1 /* herbivore */;
C=2 /* carnivore */;
S=4 /* sweet tooth */;
D=8 /* Drinker */
};
char *dish( int x ){
char buf[100]; char *p = buf; *p = 0;
if( x & D ) strcat( p, "rum-soaked " );
if( x & S ) strcat( p, "sugared " );
if( x & C ) strcat( p, "turkey " );
if( x & H ) strcat( p, "broccoli " );
return p;
}
int main(){
cout << "please pass the <<dish(C|S)<< and the"<< dish(H|D) << endl;
}

Sintaxis y Semntica de Lenguajes: Gua de trabajos prcticos 21


SINTAXIS Y SEMNTICA DE LENGUAJES
Departamento de Ingeniera en Sistemas
Universidad Tecnolgica Nacional - Facultad Regional Mendoza

70. Analice el siguiente programa y verifique su funcionamiento.

<html>
<head>
<title>Un ejemplo</title>
<script language="JavaScript">
a = prompt("A= ");
b = prompt("B= ");
c = prompt(C= ");
a = Number(a);
b = Number(b);
c = Number(c);
if (a > b && a > c)
miFuncion = new Function("x", "y", "z", "var m; m = x + y + z;return m;");
else if (b > a && b > c)
miFuncion = new Function("x", "y", "z", "return x * y * z;");
else
miFuncion = new Function("x", "y", "z", "var a, m; m = x / y; a = x / z; return a + m;");
alert(miFuncion(a,b,c));
</script>
</head>
<body>
<p>Ecuacin, ingrese coeficientes</p>
</body>
</html>

71. Analice el siguiente programa escrito en Ada, que muestra el valor 5 en la salida.
Luego si se invierte el orden de las lneas 6 y 7, muestra el mismo valor. Explicar el
comportamiento y teniendo en cuenta cmo se implementa la semntica del pasaje de
parmetros, responda:

1 With Gnat.IO; use Gnat.IO; Qu forma de pasaje de argumentos se usa?


2 procedure prueba is
3 x : Integer;
4 procedure uno(a, b : in out Integer) is Si la definicin de x estuviera entre las
5 begin lneas 8 y 9, compilara igual o no? qu regla
de alcance se aplicara?
6 b := 5;
7 a := 6;
8 end; Dibuje cmo sera el esquema de los enlaces
9 begin entre ambos registros de activacin, usando
vnculos dinmicos y estticos.
10 x := 1;
11 uno(x, x);
12 Put(x);
13 end;

Sintaxis y Semntica de Lenguajes: Gua de trabajos prcticos 22


SINTAXIS Y SEMNTICA DE LENGUAJES
Departamento de Ingeniera en Sistemas
Universidad Tecnolgica Nacional - Facultad Regional Mendoza

72. Analice el siguiente pseudocdigo y responda lo que se solicita:


procedimiento prog
Suponiendo que se aplican slo reglas de alcance
x, a : entero; esttico:
procedimiento uno
Dibuje un diagrama de Venn que represente la
x, y : entero;
estructura del programa, indicando el mbito en que
funcion dos est definido cada smbolo que aparece en el mismo.
a, y : entero;
Identificar las de lneas en las que hay errores e
inicio
indique en qu consisten.
y := cuatro;
tres; Indique cules errores son corregibles, sin cambiar
la estructura lgica del programa y cmo lo hara.
regresa a;
fin dos; Suponiendo que se aplican reglas de alcance esttico
inicio y en otro caso dinmico (sin usar discriminantes de
acceso), durante la ejecucin de Dos y Cuatro,
tres;
indique qu smbolos estaran vivos y cules seran
y := dos; accesibles, para cada subprograma.
fin uno;
Dibuje el estado de la pila de memoria, indicando los
procedimiento tres
enlaces de cadenas estticas, luego haga lo mismo
m : entero; usando display, para el punto de ejecucin
funcion cuatro inmediatamente antes de y := dos;
y : entero;
inicio
x := cuatro;
regresa m;
fin cuatro;
inicio
uno;
fin tres;
inicio
tres;
a := dos;
fin prog;

73. Suponiendo que se ejecuta la llamada a la siguiente funcin, dibuje el diagrama del
registro de activacin usando esquema de DISPLAY, para cada activacin de calcula().
function llama() {
function calcula(a, n) {
var p;
p = a + eval(n);
alert(p);
}
var x, y;
x = y = 3;
calcula(x, "x+y");
y = 4;
calcula(x, "x+y");
}

Sintaxis y Semntica de Lenguajes: Gua de trabajos prcticos 23


SINTAXIS Y SEMNTICA DE LENGUAJES
Departamento de Ingeniera en Sistemas
Universidad Tecnolgica Nacional - Facultad Regional Mendoza

74. Analice el siguiente cdigo JS y responda lo que se solicita:


var u = 1; Dibujar el mapa de memoria para cuando existe la
mxima cantidad de RA en el stack, indicar las variables
function T(ro , p){
contenidas en cada uno y sus valores.
function Q(fl){ Realizar el anlisis para las combinaciones de reglas
u = ro + fl; estticas y dinmicas de alcance a los smbolos, con
mecanismos de vinculacin al contexto profunda y
}
superficial.
if (ro >= 2){
var u = 7;
T(ro / 2, Q);
}
else {
p(ro + 1);
}
alert("T: " + u);
}
function Main(){
T(u + 3, T);
alert("M: " + u);
}
Main();

75. Analice el siguiente cdigo y responda lo que se solicita:


function mx1(p) { Dibujar el mapa de memoria para cuando existe la
var x = 1; mxima cantidad de RA en el stack, e indicar las
p = x; variables contenidas en cada uno y sus valores.
function ny2(q) {
Indicar los smbolos al alcance en cada mbito mx1,
function gp3(z) {
ny2, fw4, gp3 (diferenciar usando discriminante de
return x + z;
acceso).
}
x = q; Realizar el anlisis para las combinaciones de reglas
function fw4(y) { estticas y dinmicas de alcance a los smbolos, con
var x = y + 1; mecanismos de vinculacin al contexto profundo en un
return gp3(y * x); caso y en otro al superficial.
}
alert(fw4(4));
}
ny2(3);
}
mx1(2);

Sintaxis y Semntica de Lenguajes: Gua de trabajos prcticos 24


SINTAXIS Y SEMNTICA DE LENGUAJES
Departamento de Ingeniera en Sistemas
Universidad Tecnolgica Nacional - Facultad Regional Mendoza

76. Analice el siguiente cdigo y responda lo que se solicita:


function P(){ Indicar la secuencia de valores de salida de los
var a, b; alert().
function Q(a, c){ Dibujar el esquema de registros de activacin en el
var d; stack, para el instante previo a ejecutar la lnea con
function R(n){ la flecha, indicando en cada RA las variables
accesibles y sus valores (use discriminante en caso
if (n > 0) {
necesario)
x = 1;
alert("R+: " + n + "," + x);
return R(n - x);
}
else {
alert("R-: " + n + "," + x);
d = T();
return d;
}
}
function T(){
x = a + b;
alert("T: " + d + "," + c);
return x;
}
b = 2;
d = R(b);
alert("Q: " + a + "," + c + "," + d);
return d;
}
a = 1;
b = 2;
b = Q(b, a);
alert("P: " + x + "," + b);
}
P();

Sintaxis y Semntica de Lenguajes: Gua de trabajos prcticos 25


SINTAXIS Y SEMNTICA DE LENGUAJES
Departamento de Ingeniera en Sistemas
Universidad Tecnolgica Nacional - Facultad Regional Mendoza

77. Verificar el funcionamiento del siguiente cdigo y responda lo que se solicita:


#include <stdio.h> Qu cantidad mxima de copias del registro de
#include <string.h> activacin de esta llegan a existir en la memoria?
#define LARGO 20
char * esta(char s[], int c){ Indique el primer valor que muestra el programa.
if (strlen(s))
printf("\n%s", esta(s+c, c++)); Indique el ante-ltimo valor que muestra el
return s; programa.
}
void main(){ Indique el ltimo valor que muestra el programa.
char cad[LARGO]={"arteramente"};
int c = 0;
Indique los sucesivos valores que toma la variable c
printf("\n%s", esta(cad, c++));
de la funcin esta()
}

Sintaxis y Semntica de Lenguajes: Gua de trabajos prcticos 26

You might also like