Tema 19: Lenguajes de programación para aplicaciones informáticas. Flashcards
Def. lenguaje de programación.
- Notación para comunicarle a una computadora lo que deseamos que haga.
- Sistema notacional para describir computaciones en una forma legible tanto para la máquina como para el ser humano.
Evolución de los lenguajes de programación.
- 1ª generación: lenguaje máquina (compuesto exclusivamente por 0 y 1).
- 2ª gen: lenguajes ensambladores (facilitan la lectura y escritura del programa mediante una serie de reglas mnemotécnicas.
- 3ª gen: lenguajes de alto nivel, como C, FORTRAN, Java, etc. - > necesitan compiladores para traducir el código a lenguaje máquina.
- 4ª gen: Lenguajes de propósito específico (SQL, NATURAL, ABAP) -> solucionan problemas concretos.
- 5ª gen: utilizados principalmente en áreas de IA. Permiten especifica restricciones que se le indican al sistema (p. ej. Prolog).
sintaxis de un lenguaje de programación es un lenguaje independiente del contexto
G(T, N, S, P) -> gramática independiente del contexto.
- T es el alfabeto del lenguaje,
- N es el conjunto de símbolos no terminales,
- S es un símbolo no terminal especial denominado símbolo inicial
- P es el conjunto de producciones de la gramática
Sintaxis del lenguaje
Se denota con el lenguaje EBNF (Backus Naur Form Extendido).
Procesadores del lenguaje.
Es el conjunto genérico de aplicaciones informáticas en las cuales uno de los datos de entrada es un programa escrito en un lenguaje de programación
Traductor.
Tipo de procesador en el que tanto la entrada como la salida son programas escritos en lenguajes de programación.
- Generan código objeto a partir de un código fuente.
LF -> lenguaje fuente
LI -> lenguaje del traductor (de implementación)
LO -> lenguaje objeto
Ensambladores.
Son traductores donde el lenguaje fuente es lenguaje ensamblador y el lenguaje objeto es lenguaje máquina.
Compiladores.
Son los procesadores más habituales.
- Son aplicaciones capaces de transformar un fichero de texto con código fuente en un fichero en código máquina ejecutable.
Esquema de fases de un compilador.
- Análisis léxico: se encarga de verificar si todas las cadenas del programa pertenecen o no al lenguaje realizando un análisis símbolo por símbolo
- Análisis sintáctico: Se analiza la estructura de las expresiones en base a la gramática determinando si la secuencia de componentes léxicos sigue la sintaxis del lenguaje.
- Análisis semántico: Realiza las comprobaciones necesarias sobre el árbol sintáctico para determinar el correcto significado del programa.
- Generación de código intermedio: Se genera una representación explicita del programa fuente para una máquina virtual.
- Generación de código: Toma como entrada el código optimizado y genera el código objeto.
Intérprete.
Son programas que analizan y ejecutan una a una las instrucciones que encuentran en un código fuente.
- Proceso de traducción se realiza en tiempo de ejecución.
Tipos de datos.
Un tipo de datos representa un conjunto de valores y un conjunto de operaciones definidas sobre dichos valores.
- Dos clases:
· Tipos de datos simples (no pueden descomponerse en tipos más elementales): entero, real, booleano, etc.
· Tipos de datos estructurados (se componen de tipos de datos más básicos).
Tipos de datos estructurados.
- Se construyen a partir de datos simples o estructurados.
- Arrays: estructuras de datos de tamaño fijo donde todos los elementos son del mismo tipo.
- Registros: son estructuras de datos compuestas de un número fijo de elementos que pueden ser de distinto tipo (cada uno de los elementos se denomina campo y tiene asociado un nombre para identificarlo).
- Listas: Es una colección ordenada de datos, se parecen a los arrays pero su mayor diferencia es que las listas son dinámicas.
Expresión.
Bloque de construcción básico que puede acceder a los datos del programa y que devuelve un resultado.
Puede ser una constante, variable, etc. -> Su evaluación devuelve un valor
Enunciado (sentencia).
Bloque de construcción en el que se basan los lenguajes imperativos.
Formado por expresiones.
Evaluación de expresiones.
- Evaluación en cortocircuito: evita evaluar un segundo operando de la expresión si no es estrictamente necesario (p. ej. dentro de un bucle).
- Evaluación diferida o perezosa: consiste en retardar el cálculo de las expresiones hasta que realmente son necesarias (lenguajes funcionales).
- Evaluación estricta: expresiones son totalmente evaluadas antes de necesitarse (lenguajes imperativos).