Los ordenadores son una mezcla equilibrada de Software y Hardware
Los compiladores son programas de computadora que traducen de un lenguaje a otro un lenguaje escrito en lenguaje fuente y produce un programa equivalente escrito en lenguaje objeto
Un compilador se compone internamente de varias etapas o faces que realizan operaciones lógicas y estas son:
Analizador léxico
Lee la secuencia de caracteres de izquierda a derecha del programa fuente y agrupa la secuencia de caracteres en unidades con significado propio (componentes léxicos o tokens)
Las palabras clave identificadores, operadores, constantes numéricas, signos de puntuación como separadores de sentencia, llaves, parestesias, etcétera. son diversas clasificaciones de componentes léxicos.
Actividad:
Dos conceptos de analizador léxico, ejemplo y representación de sus componentes.
Análisis léxico (Scanner)
Scanner tiene las funciones de leer el programa fuente como un archivo de
caracteres y dividirlo en tokens. Los tokens son las palabras reservadas de un lenguaje,
secuencia de caracteres que representa una unidad de información en el programa fuente. En
cada caso un token representa un cierto patrón de caracteres que el analizador léxico
reconoce, o ajusta desde el inicio de los caracteres de entrada. De tal manera es necesario
generar un mecanismo computacional que nos permita identificar el patrón de transición entre
los caracteres de entrada, generando tokens, que posteriormente serán clasificados. Este
mecanismo es posible crearlo a partir de un tipo especifico de maquina de estados llamado
autómata finito.
Ejemplos:
Representación de un Analizador léxico
Los componentes léxicos se representan:
1. Palabras
reservadas: if, while, do, …
2. Identificadores:
variables, funciones, tipos definidos por el usuario, etiquetas, …
3. Operadores:
=, >, <, >=, <=, +, *, …
4. Símbolos
especiales: ;, ( ), { }, …
5. Constantes
numéricas. literales que representan valores enteros y flotantes.
6. Constantes
de carácter: literales que representan cadenas de caracteres.
¿Qué es un analizador léxico?
Se encarga de buscar los
componentes léxicos o palabras que componen el programa fuente, según unas
reglas o patrones. La entrada del analizador léxico podemos definirla como una
secuencia de caracteres.
El analizador léxico tiene que
dividir la secuencia de caracteres en palabras con significado propio y después
convertirlo a una secuencia de terminales desde el punto de vista del analizador
sintáctico, que es la entrada del analizador sintáctico. El analizador léxico
reconoce las palabras en función de una gramática regular de manera que sus NO
TERMINALES se convierten en los elementos de entrada de fases posteriores.
Ejemplos:
Representación de sus componentes
Análisis sintáctico
determina si la secuencia de componentes léxicos sigue la sintaxis del lenguaje y obtiene la estructura jerárquica del programa en forma de árbol, donde los nodos son las construcciones de alto nivel del lenguaje.
Se determina las relaciones estructurales entre los componentes léxicos esto es semejante a realizar el análisis gramatical sobre una fase en el lenguaje natural. La estructura sintáctica se define mediante las gramáticas independientes del contexto
Actividad:
Dos conceptos de analizador sintáctico, ejemplo y representación de sus componentes.
¿Qué es el analizador sintáctico?
Es la fase del analizador que
se encarga de chequear el texto de entrada en base a una gramática dada. Y en
caso de que el programa de entrada sea válido, suministra el árbol sintáctico
que lo reconoce. En teoría, se supone que la salida del analizador sintáctico
es alguna representación del árbol sintáctico que reconoce la secuencia de
tokens suministrada por el analizador léxico. En la práctica, el analizador
sintáctico también hace:
• Acceder a la tabla de
símbolos (para hacer parte del trabajo del analizador semántico).
• Chequeo de tipos (del
analizador semántico).
• Generar código intermedio.
• Generar errores cuando se
producen. En definitiva, realiza casi todas las operaciones de la compilación.
Este método de trabajo da lugar a los métodos de compilación dirigidos por
sintaxis.
Representación de sus componentes
Análisis Semántico
El análisis semántico dota de
un significado coherente a lo que hemos hecho en el análisis sintáctico.
El chequeo semántico se
encarga de que los tipos que intervienen en las expresiones sean compatibles o
que los parámetros reales de una función sean coherentes con los parámetros
formales
Funciones principales
Identificar cada tipo de
instrucción y sus componentes
Completar la Tabla de Símbolos
Realizar distintas
comprobaciones y validaciones:
Comprobaciones de tipos.
Comprobaciones del flujo de
control.
Comprobaciones de unicidad.
Comprobaciones de
emparejamiento.
Actividad:
Concepto de analizador semántico, ejemplo y representación de sus componentes.
La tarea del compilador
requiere la extracción del contenido semántico incluido en las distintas
sentencias del programa. Es por esto que se hace necesario dotar al compilador
de una serie de rutinas auxiliares que permitan captar todo aquello que no se
ha expresado mediante la sintaxis del lenguaje y todo aquello que hace
descender a nuestro lenguaje de programación de las alturas de una máquina
abstracta hasta el nivel de un computador real.
El análisis semántico completa
las dos fases anteriores de análisis lexicográfico y sintáctico incorporando
ciertas comprobaciones que no pueden asimilarse al mero reconocimiento de una
cadena dentro de un lenguaje.
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 la fase posterior de generación de código.
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
Ejemplo
Representación de sus componentes
.
Muy bueno
ResponderEliminarMe resultó muy util tu blog, muchas gracias.
ResponderEliminarJusto voy a comenzar con la materia de taller de compiladores y la calificación se basa en crear un compilador en java.
ResponderEliminarbn
ResponderEliminarExcelente, muy bien detallado cada punto, si pudieras agregar al post solamente la parte después del análisis que seria la parte de síntesis que es la parte de la implementación del código estaría completo. Muchas gracias!
ResponderEliminar