UNIVERSIDAD DE SAN CARLOS DE GUATEMALA
FACULTAD DE INGENIERIA
ESCUELA DE SISTEMAS
NOMBRE DEL CURSO: Laboratorio de Lenguajes Formales y de Programación
CÓDIGO: 796 CRÉDITOS: 3
AREA A LA QUE
ESCUELA: Ciencias y Sistemas Ciencias de la Computación
PERTENECE:
770 – Introducción a la
Programación y Computación 1 777 - Organización de Lenguajes y
Compiladores 1
PRE REQUISITOS: POST REQUISITOS:
795 – Lógica de Sistemas
772 - Estructuras de Datos
960 – Matemática de Cómputo 1
CATEGORIA: Obligatorio SEMESTRE: Primero 2023
CATEDRÁTICO (A): Ing. David Estuardo Morales Ajcot AUXILIAR: Diego Andrés Obín Rosales
EDIFICIO: MEET SECCIÓN: B+
SALÓN DEL
SALON DEL CURSO: SALÓN 69 SALÓN 29
LABORATORIO:
HORAS POR HORAS POR
SEMANA DEL 2 SEMANA DEL 2
CURSO: LABORATORIO:
DIAS QUE SE
DÍAS QUE SE
Martes IMPARTE EL Sábado
IMPARTE EL CURSO:
LABORATORIO:
HORARIO DEL HORARIO DEL
07:10 – 08:50 HRS 12:10– 13:50 HRS
CURSO: LABORATORIO:
DESCRIPCIÓN DEL CURSO:
El laboratorio tiene como propósito introducir al estudiante de ciencias de la computación al estudio, análisis y
comprensión de lenguajes de programación bajo una estructura genérica que contribuya al desarrollo de las
capacidades de manejo y diseño de gramáticas del estudiante; abarcando conocimientos de modelos matemáticos
que las resuelven y de lenguajes reales conocidos donde se pueden implementar.
OBJETIVOS:
Objetivo General
Introducir al estudiante al conocimiento y desarrollo de los conceptos teóricos y matemáticos necesarios
que fundamentan los lenguajes formales y de programación; mediante la clasificación de gramáticas, y el
diseño de lenguajes mediante autómatas, expresiones y gramáticas.
Objetivos Específicos
Diseñar gramáticas que representen lenguajes específicos.
Aplicar los conocimientos adquiridos en clase para implementar soluciones en el lenguaje Python.
METODOLOGÍA:
Se imparten clases con material de apoyo que es proporcionado al estudiante al finalizar la clase.
Se realizan prácticas y proyectos en donde se ponga en práctica y se puedan evaluar los conceptos
adquiridos en el curso, tomando en cuenta que pueden incluirse temas de cursos pre-requisito.
Se impartirán clases prácticas donde se resuelvan problemas relacionados con el tema a desarrollar.
RESTRICCIONES:
Copias parciales o totales en la elaboración de tareas, hojas de trabajo, investigaciones, etc. serán
sancionadas con nota de cero puntos.
Copias en prácticas y proyectos serán sancionadas con una nota de cero puntos y reportadas a la Escuela
de Sistemas.
Las tareas, prácticas, proyectos y cualquier otra actividad deben ser entregados bajo un formato
establecido en la fecha y hora indicadas.
OBSERVACIONES:
Solo se calificarán exámenes, prácticas, proyectos y demás actividades de estudiantes asignados en el
curso. NO se agregan estudiantes en acta de notas.
NO se aceptan estudiantes con problemas de prerrequisitos; por ende, NO se pasan notas de semestres
anteriores y no se guardan notas para semestres posteriores.
Es obligatorio aprobar el laboratorio para tener derecho a examen final de la clase magistral.
Se debe contar con un 80% de asistencia para aprobar el laboratorio.
El laboratorio debe ser aprobado con una nota mínima de 61 puntos.
Las prácticas y proyectos deben desarrollarse utilizando el lenguaje Python.
EVALUACION: El laboratorio se evalúa sobre una nota de 100 puntos teniendo 61 puntos como nota mínima de
promoción. El detalle de la ponderación es el siguiente:
Aspecto Valor
- Tareas, cortos y hojas de trabajo 10 pts.
- Práctica 15 pts.
Publicación: 29/07/2022
Entrega: 21/08/2022
- Proyectos
Proyecto 1 30 pts.
Publicación: 22/08/2022
Entrega: 22/09/2022
Proyecto 2 35 pts.
Publicación: 23/09/2022
Entrega: 24/10/2022
- Examen final 10 pts.
Total 100 pts.
CONTENIDO:
1. Unidad 1: Python 3.6. Conversión AFN a AFD
1.1. Introducción al lenguaje 3.6.1. Método del Árbol
1.1.1. Historia [Link]. Anulables
1.1.2. Aspectos básicos [Link]. Cálculo de First, Last y Next
1.2. Buenas practicas 3.6.2. Optimización de estados
1.3. Librerías
1.4. Clases, Métodos y Funciones 4. Unidad 3: Análisis Sintáctico
1.5. Arreglos 4.1. Función del analizador sintáctico
1.6. Diccionarios 4.2. Lenguajes libres de contexto
1.7. Iteraciones 4.3. Gramáticas Tipo 2
1.7.1. Ciclos For 4.3.1. Árboles de derivación
1.7.2. Ciclos While 4.3.2. Ambigüedad
1.8. Archivos 4.3.3. Recursividad
1.8.1. Lectura 4.4. Autómatas de Pila
1.8.2. Escritura 4.4.1. Procesamiento
4.4.2. Tipos de aceptación
2. Unidad 2: Lenguajes [Link]. Estado Final
2.1. Lenguajes [Link]. Pila vacía
2.1.1. Lenguaje Natural 4.4.3. Teorema 2.2 (Autómata de Pila desde
2.1.2. Lenguajes Formales Gramática tipo 2)
2.1.3. Lenguajes de Programación
2.2. Evolución de los Lenguajes de Programación
2.2.1. Paradigmas
2.2.2. Generaciones de los lenguajes de
programación
2.3. Procesadores de Lenguaje
2.3.1. Intérprete
2.3.2. Compilador
[Link]. Estructura de un compilador
[Link]. Herramientas
2.3.3. Diferencias y Ejemplos
2.4. Jerarquía de Chomsky
2.4.1. Clasificación de gramáticas
2.4.2. Definiciones
3. Unidad 2: Análisis Léxico
3.1. Definición y Función del analizador Léxico
3.1.1. Patrones, Tokens y Lexemas
3.1.2. Errores Léxicos
3.2. Operaciones entre lenguajes
3.3. Expresiones Regulares
3.4. Diagrama de transición de estados
3.4.1. Tablas de transición
3.5. Autómatas Finitos
3.5.1. Autómatas finitos no deterministas (AFN)
3.5.2. Autómatas finitos deterministas (AFD)
BIBLIOGRAFÍA:
Aho, A., Lam, M., Sethi, R. & Ullman, J. (2007). Compilers: Principles, Techniques & Tools (2nd ed.). Pearson.
Adicionales:
Linz, P. (2017). An Introduction to Formal Languages and Automata (6th ed.). Jones & Bartlett Learning.
Hopcroft, J., Motwani, R. & Ullman, J. (2007). Introduction Automata, Theory, Languages and Computation. (3rd
ed.). Pearson.
Louden, K. (2004). Lenguajes de programación: principios y práctica. (2nd ed.). Cengage Learning.