Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Facultad de Ingeniería
Departamento de Ciencias de la Computación Semestre 1 de 2010
CC3006 – Diseño de Lenguajes de Programación Sección: 10
Byron Orlando Morales Sequen 08414
Tarea 2
Entrega: lunes, 15 de febrero de 2,010.
1. Considere la gramática:
S L∣a
L L , S∣S
1. ¿Cuáles son los terminales, los no terminales y el símbolo inicial?
2. Encuéntrense árboles de análisis sintáctico para las siguientes frases:
1. a , a
2. a , a , a
3. a ,a , a ,a , a
2. Construya un DFA que acepten los siguientes lenguajes sobre el alfabeto {0, 1} :
1. Conjunto de cadenas que terminen en 00
2. Conjunto de cadenas con tres 0 consecutivos (no necesariamente al final)
3. Conjunto de cadenas que empiecen con 01
3. Escriba expresiones regulares para los lenguajes del ejercicio anterior.
1. Conjunto de cadenas que terminen en 00
0∣1∗ 00
2. Conjunto de cadenas con tres 0 consecutivos (no necesariamente al final)
01 0∣1∗
0∣1∗ 0010∣1∗
4. De una descripción del lenguaje que generan las siguientes expresiones regulares:
1. 0 ∗ 1∗ 000 0∣1∗
Tiene las características:
• Es infinito.
• No contiene a la cadena vacía ( ).
• Siempre contienen a la subcadena 000.
• Cada cadena del lenguje contiene a '0' cero o más veces seguido de '1', cero o más
veces. Luego contiene a la subcadena '000'; y por último tiene a '0' o a '1' cero o
más veces.
2. 0∣10∗ 1∗
Tiene las características:
• Es infinito.
• Contiene a la cadena vacía ( ).
• Cada cadena del lenguje contiene a '0' o '10' cero o más veces seguido de cero o
más 1's.
5. Dadas dos expresiones regulares r 1 y r 2 . ¿Cómo demostraría (o refutaría) que
L r 1 =L r 2 ?
Para demostrar que L r 1 =L r 2 se necesita que para cualquier cadena w que
pertenezca a L r 1 , donde w=w 1 w2 ... wn y cada w i pertenece a L r 1 , entonces w
también debería estar en L r 2 , y por tanto cada w i también debería estar en L r 2 .
Por ejemplo, en el lenguaje dado por a∣b y el lenguje dado por b ∗ no continenen las
mismas cadenas ( b ∗ no contiene a a , etc.). Mientras que el lenguaje dado por
a∣ba∣b y el lenguaje dado por aa∣ab∣ba∣bb si son equivalentes, ya que cada cadena
del cualquiera de los dos lenguajes se encuentra en el otro.
8. Dada una especificación de componentes léxicos, explique ¿cómo a partir de dicha
especificación se puede generar un analizador léxico que reconozca dicha
especificación (i.e. que reconozca cada uno de los componentes léxicos)?
El análisis se basa en dos aspectos (Reyes):
1. El tiempo: aproximar el número de pasos que se realizarán para la ejecución del
algoritmo estudiado.
2. El espacio: aproximar la cantidad de memoria utilizada para la ejecución del
algoritmo estudiado.
Saber si las clases P y NP son iguales es el más importante problema abierto en Ciencias
de la Computación teórica (de hecho se ofrece un millón de dólares por ser uno de los
problemas del milenio). Si tomamos un conjuto de problemas de clase P y le llamamos X,
y tomamos un conjunto de problemas de clase NP y le llamamos Y; entonces si X Y o
X =Y , es decir Y se puede escribir como un conjunto de soluciones de los problemas X.
En términos más simples, Y es “más sencillo” que X. También hay que saber que el
conjunto completo más importante en NPcompleto (Reyes).
En resumen, los problemas del conjunto NPcompleto tienen la característica de que, si se
llega a encontrar una solución en tiempo P para algún miembro del conjunto (cualquiera
de los problemas de NPcompleto), entonces de hecho existe una solución de tiempo P
para todol los problemas de NPcompleto (Reyes).
10. Investigación: Generadores de Analizadores Léxicos
Un analizador léxico es un módulo destinado a leer caracteres del archivo de entrada,
donde se encuentra la cadena a analizar; reconocer subcadenas que correspondan a
símbolos del lenguaje; y, retornar los tokens correspondientes y sus atributos (Hopcroft, et.
al., 2001).
Escribir analizadores léxicos eficientes a mano puede resultar una tarea tediosa, para
evitarla se han creado herramientas de software que generan automáticamente un
analizador léxico a partir de una especificación provista por el usuario, denominados
generadoresde analizadores léxicos (Bavera, et. al., 2003).
Todas las herramientas para generar analizadores léxicos permiten definir la sintaxis de
los símbolos mediante expresiones regulares, mientras que sus atributos deben ser
computados luego del reconocimiento de una subcadenaque constituya un símbolo del
lenguaje, analizándola (Bavera, et. al., 2003).
En síntesis un generador de analizadores léxicos toma un archivo en el cual se especifica
el conjunto de reglas (expresiones regulares) que describen completamente al lenguaje
del que se desea crear el analizador léxico y nos genera el código fuente (programa) que
realiza la tarea del analizador léxico (Bavera, et. al., 2003).
Algunos generadores léxicos que ya existen son:
• Lex es para C, muy utilizado en ambiente Unix
• JLex que es una implementación para Java. Además de crear un analizador léxico
también genera un analizador sintáctico y semántico, dado el mismo archivo
origen.
BIBLIOGRAFÍA:
1. Aho, A; Lam, M.; Sethi, R; Ullman, J. Compilers – Priciples, Techniques, & Tools.
Segunda edición. 2006. Pearson AddisonWesley, Estados Unidos de
Norteamérica.
2. Hopcroft, J.; Motwani, R.; Ullman, J. Automata Theory, Languages, and
Computation. Second Edition. 2001. Pearson AddisonWesley, Estados Unidos de
Norteamérica.
3. Reyes, A. Complejidad computacional (Análisis de Algoritmos).
http://fisiwikipedia.wikispaces.com/file/view/Complejidad+computacional.pdf
4. Bavera, F.; Nordio, D.; Arroyo, M.; Aguirre, A. JTLex un Generador de Analizadores
Léxicos Traductores. 2003. Universidad Nacional de Río Cuarto, Argentina.