Universidad de Costa Rica
|
|
Lea bien el examen antes de hacerlo. El examen es a libro abierto. Cuenta la documentación. Cuenta la redacción y la ortografía. Puede hacer el examen con lápiz. Debe resolver todas las preguntas. ¡No haga más de lo que se le pide!
1) [33 pts] Hay muchas formas de escribir una fecha:
|
|
|
1.a) [16 pts]
Haga un programa Perl que lea un archivo y reconozca fechas
escritas en cualquier formato. Cada vez que encuentre una fecha,
debe convertirla al formato (YYYY/MM/DD)
. Grabe tal
cual lee el resto del archivo.
1.b) [16 pts] Haga lo mismo pero usando un programa generado usando Lex/Flex.
2) [33 pts] Considere el lenguaje de paréntesis anidados, en que las hileras tienen esta forma:
[] () [[[]]] ((())) [([ ([( )]) ])]
2.a) [11 pts] Escriba una gramática SLR(1) que sirva para generar todas las hileras de paréntesis anidados. Evite que la hilera nula sea generada.
2.b) [11 pts] Encuentre las tablas que un analizador sintáctico SLR(1) usaría para reconocer hileras este lenguaje.
2.c) [11 pts]
Muestre cómo un analizador sintáctico que use las
tablas que usted calculó reconocería la siguiente
hilera (suponga que el analizador léxico salta sobre los
espacios en blanco):
[] (()) [([ ])]
3) [33 pts] El lenguaje C tiene una instrucción con la siguiente forma:
for ( exp1; exp2; exp3 )
{ stmt }
3.a) [11 pts] Haga un diagrama en el que muestre cómo debe quedar compilado este código.
3.b) [22 pts] Escriba un esquema de traducción
por sintaxis que transforme un ciclo for
en
código objeto para una máquina de pila. Debe usar la
pareja Lex/Yacc o
Flex/Bison en su respuesta.
Lea bien el examen antes de hacerlo. El examen es a libro abierto. Cuenta la redacción y la ortografía. Puede hacer el examen con lápiz. Resuelva todas las preguntas. ¡No haga más de lo que se le pide!
1) [33 pts] Programación Perl
Haga un programa que lea un grupo de archivos ASCII para obtener de ellos las direcciones electrónicas de las solicitudes que haga. Los archivos contienen colecciones de mensajes de correo electrónico como las que se muestran en la siguiente figura:
From cyberteq3@mafalda.teletel.com.ar Wed May 20 07:51:15 1998 Return-Path: <cyberteq3@mafalda.teletel.com.ar> Received: from teletel.com.ar (200.10.110.101) by mail02.rapidsite.net (8.8.5/8.8.5) with SMTP id JAA03974 for <ci1322@ecci.ac.cr>; Wed, 20 May 1998 09:50:40 -0400 (EDT) Received: from pc3 by teletel.com.ar with smtp (Smail3.1.29.1 #2) id m0yc3eF-000sC; Wed, 20 May 98 10:50 GMT Message-Id: <m0yc3eF-000gcsC@teletel.com.ar> Comments: Authenticated sender is <cyberteq3@mail.teletel.com.ar> From: Juan Ramos <cyberteq3@smail.teletel.com.ar> To: ci1322@ecci.ac.cr Date: Wed, 20 May 1998 10:57:43 +0000 MIME-Version: 1.0 Content-type: text/plain; charset=US-ASCII Content-transfer-encoding: 7BIT Subject: Carta al estudiante I-Sem-1995 Priority: normal X-mailer: Pegasus Mail for Win32 (v2.53/R1) X-Loop-Detect: 1 Status: RO X-Status: Quiero información sobre el curso para un estudio personal. |
El renglón From:
aparece
siempre antes del renglón Subject:
, y contiene
la dirección de correo electrónico a extraer. En el
renglón Subject:
viene la
indicación de la información a extraer. Para este
ejemplo, al procesar el archivo su programa debe extraer los
siguientes datos:
Juan Ramos <cyberteq3@smail.teletel.com.ar>
http://www.ecci.ac.cr/~ci1322/1995-1
Cada archivo a procesar contiene muchos mensajes. Su programa debe
dejar en la salida estándar todas las parejas de renglones
que extraiga. Sin embargo, cuide de evitar procesar renglones que
no contengan la línea de Subject:
.
Diane Wood Sponheim <dsponhei@luthersem.edu> http://www.ecci.ac.cr/~ci1322/1995-1 Vary Blanco <Vary@hotmail.com> http://www.ecci.ac.cr/~ci1322/1997-2 Concepcion Larios <concep@caribe.net> http://www.ecci.ac.cr/~ci1322/1995-2 Asparagus Jovenus <beavis@hp9000.cpd.uva.es> http://www.ecci.ac.cr/~ci1322/1996-1 Andres Rivera <arivera@quercus.inbio.ac.cr> http://www.ecci.ac.cr/~ci1322/1998-1 Carolina Uribe <mcuribe@reymoreno.net.co> http://www.ecci.ac.cr/~ci1322/1993-3 |
2) [66 pts] Considere el lenguaje de paréntesis anidados, en que las hileras tienen esta forma:
[] () [[[]]] ((())) [([ ([( )]) ])]
2.a) [11 pts] Escriba una gramática LL(1) que sirva para generar todas las hileras de paréntesis anidados. Evite que la hilera nula sea generada. Use tres o menos no terminales.
2.b) [11 pts] Encuentre las tablas que un analizador sintáctico LL(1) usaría para reconocer hileras este lenguaje.
2.c) [11 pts] Encuentre las tablas que un analizador sintáctico SLR(1) usaría para reconocer hileras este lenguaje.
2.d) [11 pts]
Muestre cómo un analizador sintáctico LL(1) que use
las tablas que usted calculó reconocería la
siguiente hilera (suponga que el analizador léxico salta
sobre los espacios en blanco):
[] (()) [([ ])]
2.e) [11 pts]
Muestre cómo un analizador sintáctico SLR(1) que use
las tablas que usted calculó reconocería la
siguiente hilera (suponga que el analizador léxico salta
sobre los espacios en blanco):
[] (()) [([ ])]
2.f) [11 pts] Compare la cantidad de esfuerzo que tiene que hacer el analizador sintáctico LL(1) respecto del SLR(1), y explique cuál de los dos es má eficiente en términos de tiempo y de espacio.
Adolfo Di Mare <adolfo@di-mare.com>.
|