Please enable JavaScript.
Coggle requires JavaScript to display documents.
Lenguajes de Programación - Coggle Diagram
Lenguajes de Programación
Generación de código ejecutable
Fases
Análisis Léxico
Escanea el programa para identificar tokens.
Análisis Sintáctico
PARSE
Función que construye un árbol de sintáxis abstracta
Representación simplificada y estructurada (en forma de árbol) de un programa. Utiliza la sintáxis abstracta. :
Árbol de sintáxis concreta, también llamado árbol de parseo. Muestra en forma de árbol, la derivación de las cadenas de un progama. Usa la sintaxis concreta.
Análisis Semántico
Comprueba que no existan errores semánticos.
Análisis, inferencia y verificación de tipos.
Variables
Sustitución
Utilizando una función subst, y una variable ligada junto con su valor, reemplazamos cada aparición de esta en el programa. Es necesario cuidar el alcance, para no sobreescribir una variable distinta con el mismo nombre.
Ambientes
Creamos una colección de sustituciones, pero no las aplicamos inmediatamente, sino hasta el momento en que sea necesario. Con una estructura apropiada, esto nos ayuda a reducir la complejidad del intérprete de O(n^2) a O(n)
Tipos
Libre
Podemos pensarlas como aquellas que "no tienen significado"
Ligada
Podemos pensarlas como aquellas que "tienen un significado".
De Ligado
Podemos pensarlo como las etiquetas de los identificadores
Ejemplo:{with {a b} {with {x 10} {+ x 10}}}
Libre: b. Ligada: x. De ligado: x,a
Alcance
Estático
Se buscan las variables en el contexto local.
Closures
Necesarias para la implementación de alcance estático en un lenguaje con funciones.
Copias del ambiente en el punto de declaración de una función.
Es el tipo más común, pues es más fácil de razonar.
Dinámico
Se buscan las variables desde el tope del ambiente
Ejemplo, emacs lisp
No es muy común pues es difícil de razonar
Como dato curioso, se introdujo "por error" en la primera implementación de Lisp. Sin embargo, tomó apróximadamente 15 años corregirlo (con la primera implementación de Scheme).
¿Qué es un lenguaje de programación?
Definición formal
L = Terna: P, D, .
P: Conjunto no vacío de programas de L
Conjunto no vacío de datos (E/S) de L
.: Función semántica tal que .:=(P->D)->D
Lenguaje Anfitrión
Ejemplo. El intérprete de referencia de Python, CPython está principalmente implementado en C. En este sentido, el lenguaje anfitrión de Python es C.
El lenguaje usado por el intérprete o compilador como "motor" del lenguaje
Lenguaje Objetivo
El lenguaje en que escribirá el usuario final.
Ejemplo: El lenguaje anfitrión de CPython es Python.
Cuando el lenguaje anfitrión y el lenguaje objetivo son el mismo, se dice que el lenguaje es hospedado. Y al proceso de llegar a esto se le conoce como bootstrapping.
-
Ejemplo: C, el compilador gcc está escrito principalmente en C
Taxonomía
Por paradigma
Declarativo
Funcional
Haskell
Lógico
Prolog
Imperativo
Estructural
C
Orientado a procedimientos
Fortran
Orientado a objetos
Java
Por ejecución
Interpretado
Se evalúa linea por línea, el proceso de desarrollo es más veloz, pero la ejecución es más lenta.
Recibe: datos + progama
Produce: Salida al usuario
Compilado
Se analiza el programa para producir un ejecutable, es decir, un archivo en lenguaje máquina. Por lo tanto la ejecución es más rápida una vez compilada, pero el desarrollo puede ser más lento.
Recibe: Progama
Produce: Ejecutable
Notemos que ninguna de estas clasificaciones es absoluta. Hay híbridos, como lenguajes multiparadigma, o lenguajes byte-code interpreted
Elementos de un LP
Sintáxis
Apariencia
Azucar sintactica
Facilitan lectura y escritura, pero no agregan funcionalidad
Semántica
Comportamiento, significado
Bibliotecas
Utilidades para el programador
Idioms
Convenciones de uso
Funciones
Cálculo lambda (introducción)
Nace como intento de crear una teoría fundacional. Aunque fracasó en este intento, posteriormente fue retomoado como un modelo de computación universal.
Dato curioso: el nombre lambda proviene de la transformación x̂ -> ^x ->λx. Aunque también se menciona que fue una decisión completamente arbitraria.
Tipos de lenguajes según su manejo de funciones
Primera clase
Las funciones son tratadas como valores en todo sentido, en particular, pueden ser usadas como argumentos, retornadas por otras funciones, y almacenadas.
Primer orden
Las funciones no son valores, solo pueden definirse y aplicarse.
Mayor orden (higher order)
Las funciones pueden tomar otras funciones como argumentos.
Algunas fuentes las definen como funciones que retornan funciones.