Unidad I: Conceptos preliminares de lenguajes de programación Razones para estudiar conceptos de lenguajes de programación Criterios de evaluación Categorías de lenguajes Evolución de los principales lenguajes de programación Métodos para describir Sintaxis y Semántica BNF, EBNF, Grafos de Sintaxis Gramáticas Atribuidas Semántica Denotacional Unidad II: Elementos de un lenguaje de programación Nombres, Ligamiento, Chequeo de Tipo y Alcance Tipos de Datos Tipos primitivos Tipos estructurados Expresiones y Sentencias de Asignación Expresiones Aritméticas, Relacionales y Booleanas Sobrecarga de Operadores, Conversiones de tipos Evaluación corto-circuitoSentencias de asignación Estructuras de ControlSentencias de selección, de iteración, saltos incondicionales SubprogramasFundamentos de subprogramas Aspectos de diseño de subprogramas Métodos de traspaso de parámetros Subprogramas sobrecargados, genéricos CorutinasTipos de Datos Abstractos y Constructos para EncapsulaciónConcepto de Abstracción, Abstracción de DatosFactores de Diseño de Tipos de Datos Abstractos Ejemplos en Lenguajes de Programación Tipos de Datos Abstractos Parametrizados Constructos de Encapsulación Unidad III: Manejo de Excepciones y EventosExcepcionesConcepto de ExcepciónExcepciones y seguridadManejo de Excepciones en C++, Java, C#, Python EventosConcepto de Evento Manejo de Eventos en Java y C# Unidad IV: Paradigmas de Programación Programación Estructurada Programación Orientada a Objetos Programación Funcional Programación en Logical Unidad V: Introducción a los compiladoresLenguajes compilados y lenguajes interpretados Estructura de un compilador Generación de analizadores léxicos Generación de analizadores sintácticos Definición de tablas de símbolos Mecanismos de paso de parámetros Generación de código intermedio