Lenguajes de Programación

Lancez-Vous. C'est gratuit
ou s'inscrire avec votre adresse e-mail
Lenguajes de Programación par Mind Map: Lenguajes de Programación

1. Semántica

1.1. Variables

1.1.1. Identificador

1.1.1.1. Cadena de caracteres empleada para reconocer alguna entidad del programa

1.1.1.1.1. ¿Cuál es la longitud máxima de un identificador?

1.1.1.1.2. ¿Pueden emplearse caracteres conectores?

1.1.1.1.3. ¿Distingue mayúsculas de minúsculas?

1.1.1.1.4. ¿Las palabras especiales son palabras reservadas o palabras clave?

1.1.2. Dirección

1.1.2.1. Dirección de memoria a la que una variable está asociada. La dirección de memoria se denomina I-valor.

1.1.2.1.1. Alias

1.1.3. Tipo

1.1.3.1. Determina el rango de valores que puede tomar la variable y el conjunto de operaciones definidas para los valores del tipo.

1.1.4. Valor

1.1.4.1. El valor de una variable se denomina r-valor. La aparición de una variable en la parte derecha de una asignación denota su valor.

1.2. Ligadura

1.2.1. Asociación entre un atributo y una entidad.

1.2.1.1. Tiempo de Ligadura

1.2.1.1.1. Tiempo de Compilación

1.2.1.1.2. Tiempo de Linkado

1.2.1.1.3. Tiempo de Carga

1.2.1.1.4. Tiempo de ejecución

1.2.1.2. Ligadura Estática

1.2.1.2.1. Si ocurre antes del tiempo de ejecución y permanece inalterable durante la ejecución del programa.

1.2.1.3. Ligadura Dinámica

1.2.1.3.1. Si ocurre durante del tiempo de ejecución o puede cambiar en el transcurso de la ejecución del programa.

1.2.1.4. Ligadura de Tipos

1.2.1.4.1. Antes de que una variable pueda ser referenciada en un programa  debe haber sido ligada a un tipo de dato.

1.2.1.5. Ligadura de Espacio y Tiempo de vida

1.2.1.5.1. Proceso de asignación

1.2.1.5.2. Proceso de desasignación

1.2.1.5.3. Tiempo de vida

1.2.1.5.4. Clasificación de las variables en cuatro categorías atendiendo a sus tiempos de vida y a la zona de memoria desde donde se realiza la asignación.

1.3. Tipos

1.3.1. Comprobación de Tipos

1.3.1.1. Actividad que nos asegura que los operandos de un operador son de tipos compatibles.

1.3.1.1.1. Tipos Compatibles

1.3.1.1.2. Error de Tipos

1.3.2. Disciplina de Tipos

1.3.2.1. Un lenguaje tiene disciplina de tipos si los errores de tipos se detectan siempre.

1.3.3. Compatibilidad de Tipos

1.3.3.1. Tipos Nominal

1.3.3.1.1. Dos variables tienen tipos compatibles si están ligadas al mismo nombre de tipo.

1.3.3.2. Tipos Estructural

1.3.3.2.1. Dos variables tienen tipos compatibles si sus tipos tienen la misma estructura.

1.3.3.3. Equivalencia de declaración

1.3.3.3.1. Dos variables tienen tipos compatibles si uno de los tipos está definido con el nombre del otro.

1.3.3.4. Tipo Anónimo

1.3.3.4.1. Tipo asociado directamente con una variable mediante una declaración sin proporcionarle un nombre.

1.3.4. Subtipos y Tipos Derivados

1.3.4.1. Subtipo

1.3.4.1.1. Versión de un tipo existente con el que es compatible. Evita uno de los problemas de la compatibilidad de tipos nominal.

1.3.4.2. Tipo Derivado

1.3.4.2.1. Nuevo tipo basado en algún otro previamente definido con el que es incompatible, aunque sean estructuralmente idénticos. Heredan todas las propiedades de su tipo padre.

1.4. Ámbito

1.4.1. Rango de sentencias en las que es visible la variable. Una variable es visible en una sentencia si puede referenciarse en dicha sentencia.

1.4.1.1. Ámbito Estático

1.4.1.1.1. Método de ligadura de nombres a variables no locales que ocurre en tiempo de compilación.

1.4.1.2. Ámbito Dinámico

1.4.1.2.1. Basado en la secuencia de llamadas a subprogramas y no en la relación sintáctica entre ellos. El ámbito solo puede determinarse en tiempo de ejecución.

1.4.1.3. Entorno de Referencia

1.4.1.3.1. Colección de todos los identificadores visibles en dicha sentencia.

1.5. Constantes

1.5.1. Objeto al que se le liga un valor sólo en el momento en el que se le liga el espacio, su valor no puede cambiarse por asignación o por sentencia de entrada.

1.6. Inicialización de Variables

1.6.1. Ligadura de un valor a una variable en el momento en el que también se le liga el almacenamiento.

1.6.1.1. Variables estáticas

1.6.1.1.1. Inicialización sucede una sola vez antes del momento de la ejecución.

1.6.1.2. Variables con ligadura dinámica de espacio

1.6.1.2.1. Su inicialización es dinámica.

1.6.1.3. Variables no inicializadas

1.6.1.3.1. Las declaraciones sin inicialización crean variables no inicializadas. Se les liga memoria pero su contenido es arbitrario y no puede ser interpretado como un valor del tipo del objeto declarado.

2. Interpretación

2.1. La conversión de instrucciones de alto nivel a instrucciones a nivel de máquina se hace mediante compiladores o intérpretes.

2.1.1. Intérpretes

2.1.1.1. Es un programa que procesa los programas escritos en un lenguaje de alto nivel. Está diseñado de modo que no exista independencia entre la etapa de traducción y la etapa de ejecución.

2.1.1.1.1. Funciones

2.1.2. Ciclo

2.1.2.1. Tomar la próxima instrucción

2.1.2.2. Decodificar instrucciones

2.1.2.3. Tomar operandos designados

2.1.2.4. Saltar a operación designada

2.1.2.4.1. Ejecutar operación primitiva N

2.1.2.4.2. Ejecutar operación detener

2.1.2.5. Detener

3. Compilación

3.1. El compilador estándar emplea típicamente dos pasos sobre el programa fuente.

3.1.1. Primer Paso

3.1.1.1. Descompone el programa en los componentes que los constituyen y obtiene información, como el uso de nombres de variables del programa.

3.1.2. Segundo Paso

3.1.2.1. Genera típicamente un programa objeto a partir de esta información recogida.

3.2. Tipos de Traductores

3.2.1. Ensamblador

3.2.1.1. Es un traductor cuyo lenguaje objeto es también alguna variedad de lenguaje máquina para una computadora real pero cuyo lenguaje fuente, un lenguaje ensamblador, constituye en gran medida una representación simbólica del código de máquina objeto.

3.2.2. Compilador

3.2.2.1. Es un traductor cuyo lenguaje fuente es un lenguaje de alto nivel y cuyo lenguaje objeto se aproxima al lenguaje de máquina de una computadora real.

3.2.3. Cargador

3.2.3.1. Es un traductor cuyo lenguaje objeto es un código de máquina real y cuyo lenguaje fuente es casi idéntico. Está compuesto por lo general de programas en lenguaje de máquina en forma reubicable.

3.2.4. Preprocesador

3.2.4.1. Es un traductor cuyo lenguaje objeto es la forma ampliada de un lenguaje de alto nivel, y cuyo lenguaje objeto es la forma estándar del mismo lenguaje. El programa objeto queda listo para ser traducido y ejecutado por los procesadores del lenguaje estándar.

3.3. Análisis del Proceso de Compilación

3.3.1. Análisis del Programa Fuente

3.3.1.1. Se presenta inicialmente como una serie larga y no diferenciada de símbolos, compuesta de miles de caracteres. Durante la traducción se debe construir laboriosamente, carácter por carácter, un análisis de la estructura del programa.

3.3.2. Análisis Léxico

3.3.2.1. Esta fase consiste en agrupar una serie de caracteres en sus constituyentes elementales: identificadores, delimitadores, símbolos de operadores, números, palabras clave, espacios en blanco, comentarios, etc. Las unidades básicas de programa que resultan de este análisis se llaman elementos léxicos.

3.3.2.1.1. Se realiza la conversión a una representación interna de elementos como números, que se convierten a forma binaria interna de punto fijo o flotante.

3.3.2.1.2. Identificadores que se guardan en una tabla de símbolos y se usa la dirección de la entrada de la tabla de símbolos en lugar de la cadena de caracteres.

3.3.3. Análisis Sintáctico

3.3.3.1. Es la segunda etapa de la traducción. Se identifican las estructuras de programa más grandes. Se alterna ordinariamente con el análisis semántico.

3.3.3.1.1. Primero se identifica una serie de elementos léxicos que forman una unidad sintáctica como una expresión o declaración.

3.3.3.1.2. Luego se llama a un analizador semántico para que procese esta unidad.

3.3.4. Análisis Semántico

3.3.4.1. Es la fase medular de la traducción. Se procesan las estructuras sintácticas reconocidas por el analizador sintáctico y la estructura del código objeto ejecutable comienza a tomar forma.

3.3.4.1.1. Ocurren funciones subsidiarias importantes, como el mantenimiento de tablas de símbolos, detección de errores, expansión de macros y ejecución de enunciados en tiempo de compilación.

3.3.4.1.2. Produce el código objeto ejecutable en traducciones sencillas, la salida de esta etapa es un programa ejecutable final que puede ser manipulado por la etapa de optimización.

3.4. Tabla de Símbolos

3.4.1. Estructura medular de todo el traductor. Contiene típicamente una entrada por cada identificador diferente encontrado en el programa.

3.4.1.1. Funciones con el Analizador Semántico

3.4.1.1.1. Mantenimiento de la Tabla de Símbolos

3.4.1.1.2. Detección de Errores

3.5. Síntesis del Programa Objeto

3.5.1. Implica necesariamente generación código y también puede incluir optimización del programa que se genera.

3.5.1.1. Optimización

3.5.1.1.1. Antes de la generación de código, se lleva a cabo cierta optimización del programa en la representación interna.

3.6. Generación de Código

3.6.1. Se transforma los enunciados en lenguaje ensamblador, código de máquina u otra forma de programa objeto que constituya la salida de la traducción. El código de salida puede ser directamente ejecutable, ensamblado o carga.

3.7. Programa Objeto

3.7.1. El cargador vinculador carga los segmentos de código traducido en la memoria y luego usa tablas del cargador anexas para vincularlos entre sí introduciendo datos y direcciones de subprograma.

4. Sintaxis

4.1. Es el conjunto de reglas que debemos seguir para que el compilador sea capaz de reconocer nuestro programa como válido.

4.1.1. Métodos Formales de Descripción

4.1.1.1. Backus Naur Form (BNF)

4.1.1.1.1. Símbolos No Terminales

4.1.1.1.2. Símbolos Terminales

4.1.1.1.3. Símbolos de Partida

4.1.1.2. Extended Backus Naur Form (EBNF)

4.1.1.2.1. Elemento Opcional

4.1.1.2.2. Alternativa en Regla

4.1.1.2.3. Repetición de elementos

5. Intérpretes vs Compiladores

5.1. Intérpretes sobre Compiladores

5.1.1. El análisis sintáctico del programa, se realiza a medida que se introduce por teclado o cuando se interpreta.

5.1.2. Proporciona un error o un mensaje de diagnóstico cuando se presenta un problema, de la misma manera indica la naturaleza de este problema.

5.1.3. Interacción con el usuario, facilitando el desarrollo.

5.2. Compiladores sobre Intérpretes

5.2.1. Velocidad de ejecución, sobre todo en programas probados en los que no se esperan cambios y que deben ejecutarse muchas veces.

5.2.2. Ocupa menos memoria en el caso de programas cortos.

5.2.3. Obtiene un programa objeto, un ejecutable.