2.5.15 FPL/Abstracción y Representación de Programas
Temas:
Core
- BNF y expresiones regulares
- Programas que toman (otros) programas como entrada, como intérpretes, compiladores, verificadores de tipos, generadores de documentación
- Componentes de un lenguaje:
- Definiciones de alfabetos, delimitadores, oraciones, sintaxis y semántica
- Sintaxis vs semántica
- Programa como un conjunto de oraciones significativas no ambiguas
- Abstracciones básicas de programación: constantes, variables, declaraciones (incluyendo declaraciones anidadas), comando, expresión, asignación, selección, iteración definida e indefinida, iteradores, función, procedimiento, módulos, manejo de excepciones
- Variables mutables vs inmutables: ventajas y desventajas de reutilizar ubicación de memoria existente vs ventajas de copiar y mantener valores antiguos; almacenar cómputo parcial vs recomputación
- Tipos de variables: estáticas, locales, no locales (nonlocal), globales; necesidad y problemas con variables no locales y globales.
- Reglas de ámbito (scope): estático vs dinámico; visibilidad de variables; efectos secundarios (side-effects).
- Efectos secundarios inducidos por variables no locales, variables globales y variables con alias (aliased).
Non Core
- Valores-L (L-values) y Valores-R (R-values): mapear nombre de variable mutable a Valores-L; mapear nombres de variables inmutables a Valores-R
- Entorno (environment) vs almacén (store) y sus propiedades
- Abstracción de datos y de control
- Mecanismos para intercambio de información entre unidades de programa como procedimientos, funciones y módulos: variables no locales, variables globales, paso de parámetros, importación-exportación entre módulos
- Estructuras de datos para representar código para ejecución, traducción o transmisión.
- Representación de instrucciones de bajo nivel como instrucciones de máquina virtual, lenguaje ensamblador y representación binaria
- Cálculo lambda, enlace de variables (variable binding) y renombrado de variables.
- Tipos de semántica: operacional, axiomática, denotacional, conductual; definir y usar árboles de sintaxis abstracta; contrastar con sintaxis concreta.
Aprendizaje esperado (Learning Outcomes):
Core:
- Ilustrar el ámbito de variables y visibilidad usando programas simples [Aplicar]
- Ilustrar diferentes tipos de paso de parámetros usando un lenguaje de programación pseudo simple [Aplicar]
- Explicar el efecto secundario usando variables globales y no locales y cómo corregir tales programas [Explicar]
- Explicar cómo los programas que procesan otros programas tratan a los otros programas como sus datos de entrada [Explicar]
- Describir una gramática y un árbol de sintaxis abstracta para un lenguaje pequeño [Describir]
- Describir los beneficios de tener representaciones de programas distintas de cadenas de código fuente [Describir]
- Implementar un programa para procesar alguna representación de código para algún propósito, como un intérprete, un optimizador de expresiones o un generador de documentación [Implementar]
Generado por Ernesto Cuadros-Vargas , Sociedad Peruana de Computación-Peru, basado en el modelo de la Computing Curricula de IEEE-CS/ACM