Fundamentos de programacion

FASES DE UN COMPILADOR
Conceptualmente, un compilador opera en fases, cada una de las cuales transforma al programa fuente de una representación en otra. En la siguiente figura se muestra una descomposici6n típica de un compilador. En la práctica, se pueden agrupar algunas fases y las representaciones intermedias entre las fases agrupadas no
Necesitan ser construidas explícitamente.

PROGRAMAFUENTE

PROGRAMA OBJETO

Como se pueden ver dos fases del compilador, la administración de la tabla de símbolos y el manejo de errores, se muestran en interacción con las seis fases de análisis léxico, análisis sintáctico, análisis semántico, generación de código intermedio, optimización de código y generación de código. De modo informal, también
se llamarán “fases” al administrador de latabla de símbolos y al manejador de errores.

FASE DE ANÁLISIS LÉXICO

En un compilador, el análisis lineal se llama análisis lineal o exploración. Por análisis lineal entendemos la cadena de caracteres que constituye el programa fuente se lee de izquierda a derecha y se agrupan en componentes léxicos, que son secuencias de caracteres que tiene un significado colectivo. Por ejemplo, en análisisléxico los caracteres de las siguientes proposiciones de asignación.

Los espacios en blanco (delimitadores) que separan los caracteres de estos componentes léxicos normalmente se eliminan durante el análisis léxico.

FASE DE ANÁLISIS SEMÁNTICO
La fase de análisis semántico revisa el programa fuente para tratar de encontrar errores semánticos y reúne la información sobre los tipos para lafase posterior de generación de código. En ella se utiliza la estructura jerárquica determinada por la fase de análisis sintáctico para identificar los operadores y operandos de
expresiones y proposiciones.
Un componente importante del análisis semántico es la verificación de tipos. Aquí, el compilador verifica si cada operador tiene operandos permitidos por la especificación del lenguaje fuente.Por ejemplo, las definiciones de muchos lenguajes de programación requieren que el compilador indique un error cada vez que se use un número real como índice de una matriz. Sin embargo, la especificación del lenguaje puede permitir ciertas coerciones a los operandos, por ejemplo, cuando un operador aritmético binario se aplica a un número entero y a un número real. En este caso, el compiladorpuede necesitar convertir el número entero a real.

Ejemplo 1.1. Dentro de una máquina el patrón de bits que representa un entero es en general distinto del patrón de bits para un real, aun cuando el número entero y el real tengan el mismo valor. Por ejemplo, supóngase que todos los identificadores de la figura siguiente se han declarado reales y que tan salo 60 se supone entero. La verificación detipos de la figura a revela que * se aplica a un real, velocidad, y a un entero, 60. El tratamiento general es convertir el entero a real. Esto se ha logrado en la figura b creando un nodo extra para el operador entareal que de manera explícita convierte un entero a real. Por otra parte, como el operando de entareal es una constante, el compilador podría reemplazar la constante entera por unaconstante real
equivalente.

EXPRESIÓN REGULAR
Una expresión regular denota un conjunto de secuencias de símbolos válidas que se construyen en base al alfabeto de un lenguaje. Generalmente estos conjuntos se representación como:

?
Es una expresión regular que denota el conjunto vacío (el conjunto no contiene secuencias de símbolos).
?
Es una expresión regular que denota al conjunto quecontiene la secuencia vacía.
S
Una secuencia de símbolos S es una expresión regular que denota a un conjunto que contiene a S.

Operaciones sobre Lenguajes
Construir una expresión regular es realizar operaciones sobre el alfabeto de un lenguaje. Podemos decir que el lenguaje, en su aspecto de léxico, está conformado por las operaciones que realizamos sobre su alfabeto para definir cada unidad de…