Está en la página 1de 8

GUÍA NO.

Integrantes:
Alex Fernando Gonzales
Claudia Michel Sauceda
Yuritza January Rodríguez

1. Explique ampliamente lo que sucede en análisis léxico de un


compilador.
El analizador léxico es la primera fase de un compilador. Su principal función
consiste en leer los caracteres de entrada y elaborar como salida una
secuencia de componentes léxicos que utiliza el analizador sintáctico para
hacer el análisis.
Como el analizador léxico es la parte del compilador que lee el texto fuente,
también puede realizar ciertas funciones secundarias en la interfaz del
usuario, como eliminar del programa fuente comentarios y espacios en
blanco en forma de caracteres de espacio en blanco, caracteres TAB y de
línea nueva. Otra función es relacionar los mensajes de error del compilador
con el programa fuente.
En algunas ocasiones, los analizadores léxicos se dividen en una cascada
de dos fases; la primera, llamada “examen”, y la segunda, “análisis léxico”.
El examinador se encarga de realizar tares sencillas, mientras que el
analizador léxico es el que realiza las operaciones complejas.

2. ¿Qué representa un token en el análisis léxico?


Símbolos terminales de una gramática o Identificadores, palabras
reservadas, operadores.
Clases de token
• palabras reservadas (if, then,. . . )
• símbolos especiales (operadores aritméticos, lógicos,. . . )
• cadenas no específicas (identificador, número real,. . . )
• EOF (fin de fichero)
La cadena de caracteres concreta que se ha reconocido como un token
determinado se denomina lexema
El lexema no juega un papel desde el punto de vista estructural, pero sí desde
el semántico
A la información auxiliar que acompaña a un token se le llama
atributos del token (lexema, fila, columna,. . . )
Los tokens se especifican mediante expresiones regulares.

3. ¿Qué es un lexema?
Un lexema es una secuencia de caracteres alfanuméricos en un token. El
término se usa tanto en el estudio del lenguaje como en el análisis léxico de
la compilación de programas de computadora. En el contexto de la
programación de computadoras, los lexemas son parte del flujo de entrada
desde el cual se identifican los tokens.

4. Explique el proceso de análisis sintáctico de un compilador.


Un analizador sintáctico es una de las partes de un compilador que
transforma su entrada en un árbol de derivación.
El análisis sintáctico convierte el texto de entrada en otras estructuras
(comúnmente árboles), que son más útiles para el posterior análisis y
capturan la jerarquía implícita de la entrada. Un analizador crea tokens de
una secuencia de caracteres de entrada y son estos tokens los que son
procesados por el analizador sintáctico para construir la estructura de datos,
por ejemplo un árbol de análisis o árboles de sintaxis abstracta.

5. ¿Cuáles son los objetivos de el manejador de errores de un


analizador sintáctico?
El manejo de errores de sintaxis es el más complicado desde el punto de
vista de la creación de compiladores. Nos interesa que cuando el compilador
encuentre un error, no cancele definitivamente la compilación, sino que se
recupere y siga buscando errores. Recuperar un error no quiere decir
corregirlo, sino ser capaz de seguir construyendo el árbol sintáctico a pesar
de los errores encontrados. En vista de esto, el manejador de errores de un
analizador sintáctico debe tener como objetivos:
• Indicar los errores de forma clara y precisa. Debe informar mediante los
correspondientes mensajes del tipo de error y su localización.
• Recuperarse del error, para poder seguir examinando la entrada.
• Distinguir entre errores y advertencias. Las advertencias se suelen utilizar
para informar sobre sentencias válidas pero que, por ser poco frecuentes,
pueden constituir una fuente de errores lógicos.
• No ralentizar significativamente la compilación.

Un buen compilador debe hacerse siempre teniendo también en mente los


errores que se pueden producir, con lo que se consigue simplificar su estructura.
Además, si el propio compilador está preparado para admitir incluso los errores
más frecuentes, entonces se puede mejorar la respuesta ante esos errores
incluso corrigiéndolos

6. ¿Cales son las principales estrategias para para corregir los


errores que aparecen durante el análisis sintáctico?
Si un compilador tuviera que procesar sólo programas correctos, su diseño e
implementación se simplificarían mucho. Las primeras versiones de los
programas suelen ser incorrectas, y un buen compilador debería ayudar al
programador a identificar y localizar errores. Es más, considerar desde el
principio el manejo de errores puede simplificar la estructura de un
compilador y mejorar su respuesta a los errores. Los errores en la
programación pueden ser de los siguientes tipos:
• Léxicos, producidos al escribir mal un identificador, una palabra clave
o un operador.
• Sintácticos, por una expresión aritmética o paréntesis no equilibrados.
• Semánticos, como un operador aplicado a un operando incompatible.
• Lógicos, puede ser una llamada infinitamente recursiva.
• De corrección, cuando el programa no hace lo que el programador
realmente deseaba. Resulta evidente que los errores de corrección no
pueden ser detectados por un compilador, ya que en ellos interviene
el concepto abstracto que el programador tiene sobre el programa que
construye, lo cual es desconocido, y probablemente incognoscible, por
el compilador. Por otro lado, la detección de errores lógicos implica un
esfuerzo computacional muy grande en tanto que el compilador debe
ser capaz de averiguar los distintos flujos que puede seguir un
programa en ejecución lo cual, en muchos casos, no sólo es costoso,
sino también imposible. Por todo esto, los compiladores actuales se
centran en el reconocimiento de los tres primeros tipos de errores. En
este tema hablaremos de los errores de sintaxis, que son los que
pueden impedir la correcta construcción de un árbol sintáctico.

7. Explique de que se encarga la fase del análisis semántico.


El analizador semántico detecta la validez semántica de las sentencias
aceptadas por el analizador sintáctico. El analizador semántico suele trabajar
simultáneamente al analizador sintáctico y en estrecha cooperación.

Se entiende por semántica como el conjunto de reglas que especifican el


significado de cualquier sentencia sintácticamente correcta y escrita en un
determinado lenguaje.

8. ¿Cómo se tratan los errores en la fase del análisis semántico?


Es una de las misiones más importantes de un compilador, aunque, al mismo
tiempo, es lo que más dificulta su realización. A veces unos errores ocultan
otros.
A veces un error provoca una avalancha de muchos errores que se
solucionan con el primero.
Es conveniente un buen manejo de errores, y que el compilador detecte todos
los errores que tiene el programa y no se pare en el primero que encuentre.
Hay, pues, dos criterios a seguir a la hora de manejar errores:
Pararse al detectar el primer error.
Detectar todos los errores de una pasada.
El análisis semántico es posterior al sintáctico y mucho más difícil de
formalizar que éste. Se trata de determinar el tipo de los resultados
intermedios, comprobar que los argumentos que tiene un operador
pertenecen al conjunto de los operadores posibles, y si son compatibles entre
sí, etc. En definitiva, comprobará que el significado de lo que se va leyendo
es válido.
La salida "teórica" de la fase de análisis semántico sería un árbol semántico.
Consiste en un árbol sintáctico en el que cada una de sus ramas ha adquirido
el significado que debe tener. En el caso de los operadores polimórficos (un
único símbolo con varios significados), el análisis semántico determina cuál
es el aplicable.

9. ¿Qué es la generación de código intermedio?


En el proceso de traducir un programa fuente a código destino, un
compilador puede construir una o más representaciones intermedias, las
cuales pueden tener una variedad de formas. Los árboles sintácticos son una
forma de representación intermedia; por lo general, se utilizan durante el
análisis sintáctico y semántico.

Después del análisis sintáctico y semántico del programa fuente, muchos


compiladores generan un nivel bajo explícito, o una representación
intermedia similar al código máquina, que podemos considerar como un
programa para una máquina abstracta. Esta representación intermedia debe
tener dos propiedades importantes: debe ser fácil de producir y fácil de
traducir en la máquina destino.
10. Explique la fase de generación y optimización de código
objeto de un compilador.
La fase de un compilador es la generación de código objeto, que por lo
general consiste en código de maquina relocalizarle o código ensamblador.
Las posiciones de memoria se seleccionan para cada una de las variables
usadas por el programa. Después, cada una de las instrucciones intermedias
se traduce a una secuencia de instrucción de máquina que ejecuta la misma
tarea. Un aspecto decisivo es la asignación de variables a registros.
El generador de código objeto puede considerarse como la penúltima fase
de un compilador, la cual se encarga de tomar como entrada el código
intermedio generado por el front-end, y producir código objeto de la
arquitectura target para luego entrar en la fase de optimización de código.
Toma como entrada de representación intermedio el programa fuente y
produce como salida un programa de objeto equivalente.

11. ¿Qué es el Back-end en la construcción de


compiladores?
Es la parte que genera el código máquina, específico de una plataforma, a
partir de los resultados de la fase de análisis, realizada por el Front End.

Esta división permite que el mismo Back End se utilice para generar el código
máquina de varios lenguajes de programación distintos y que el mismo Front
End que sirve para analizar el código fuente de un lenguaje de programación
concreto sirva para generar código máquina en varias plataformas distintas.
Suele incluir la generación y optimización del código dependiente de la
máquina.
12. ¿Qué es el front-end en la construcción de
compiladores?

Es la parte que analiza el código fuente, comprueba su validez, genera el


árbol de derivación y rellena los valores de la tabla de símbolos. Esta parte
suele ser independiente de la plataforma o sistema para el cual se vaya a
compilar, y está compuesta por las fases comprendidas entre el análisis
Léxico y la generación de código intermedio.

13. Mencione y explique los tipos de errores que se


detectan durante la compilación de un programa.
Errores de sintaxis:
Son errores en el código fuente. Pueden deberse a palabras
reservadas mal escritas, expresiones erróneas o incompletas,
variables que no han sido declaradas, etc. Los errores de sintaxis
se detectan en la fase de compilación. El compilador, además de
generar el código objeto, nos dará una lista de errores de sintaxis.
Advertencias:
Además de errores, el compilador puede dar también
advertencias (warnings). Las advertencias son errores, pero no lo
suficientemente graves como para impedir la generación del
código objeto. No obstante, es importante corregir estos errores la
mayoría de las veces, ya que ante un aviso el compilador tiene
que tomar decisiones, y estas no tienen por qué coincidir con lo
que nosotros pretendemos hacer, ya se basan en las directivas
que los creadores del compilador decidieron durante la creación
del compilador.
Errores de enlazado:
El programa enlazador también puede encontrar errores.
Normalmente se refieren a funciones que no están definidas en
ninguno de los ficheros objetos ni en las bibliotecas. Puede que
hayamos olvidado incluir alguna biblioteca, o algún fichero objeto,
o puede que hayamos olvidado definir alguna función o variable,
o lo hayamos hecho mal.
Errores de ejecución:
Incluso después de obtener un fichero ejecutable, es posible que
se produzcan errores, durante la ejecución del código. En el caso
de los errores de ejecución normalmente no obtendremos
mensajes de error muy específicos o incluso puede que no
obtengamos ningun error, sino que simplemente el programa
terminará inesperadamente. Estos errores son más difíciles de
detectar y corregir (pues se trata de la lógica como tal de nuestra
aplicación).
Errores de diseño:
Finalmente los errores más difíciles de corregir y prevenir. Si nos
hemos equivocado al diseñar nuestro algoritmo, no habrá ningún
programa que nos pueda ayudar a corregirlos, pues es imposible
que un programa pueda determinar qué es lo que tratamos de
conseguir o un programa que realice aplicaciones cualquiera por
nosotros.

También podría gustarte