Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Sección : 1113
Fecha: 22-Septiembre-2015
Análisis: Se trata de la comprobación de la corrección del programa fuent e e incluye las fases
correspondient es al Análisis Léxico (que consiste en la descomposición del programa fuente en
componentes léxicos), Análisis Sintáctico (agrupación de los componentes léxicos en frases
gramaticales) y Análisis Semánt ico (comprobación de la validez semántica de las sent encias
aceptadas en la fase de Análisis Sintáctico).
Análisis Léxico: Esta fase se encarga de verificar si todas las cadenas pert enecen o no al
lenguaje. Es decir realiza un análisis símbolo por símbolo indicando el token por cada uno d e
los elem ent os reconocidos o el error en caso de no reconocer. Este análisis no logra detectar
muchos errores por su característica.
Ejemplo:
Total = valor* 5
id = id * num
Análisis Semántico: Est e análisis es más difícil de formalizar, determina el tipo de los
resultados intermedios, comprobar que los argument os que tienen un operador pert enecen al
conjunto de operadores posible, y si son compatibles entre sí.
A=b+c
1: + b c T1
2: = a T1
Opt imización de Código: Consist e en realizar una mejora en el código intermedio, para reducir
el número de líneas y hacer que la ejecución sea más rápida
A=b+c
1: + b c a
a: = b + c
LOAD B
ADD C
STORE A
Ensamblador: Para poder obt ener un programa ejecutable es preciso ensamblar est e
programa final con un ensamblador convencional.
Enlazador. Esta herramienta t oma código máquina relocalizables de los diferent es objetos
compilados y de librería, modifica las direcciones relocalizables para situarlas a los valores
absolut os adecuados, y crea el programa ejecutable.
Pasadas
Reducción de pasadas
Es deseable t ener pocas pasadas dado que la lectura y la escritura de archivos intermedios
llevan tiempo.
Sin embargo, en ocasiones resulta muy difícil generar código si no se tiene una represent ación
intermedia completa. Por ejemplo:
Las instrucciones de tipo got o que saltan hacia delante. En est e caso es posible dejar un
espacio en blanco y rellenar cuando la información est é disponible.
1.6. Herramientas para la construcción de compiladores,
Existen herramientas especializadas para implem entar las diferentes fases de un compilador.
Compiladores de compiladores
Generadores de compiladores
Toman un conjunt o de reglas que definen la traducción de cada operación del lenguaje
intermedio al lenguaje de máquina objet o.
1. Definición de la sintaxis:
Una definición dirigida por la sintaxis ut iliza una gramática independient e del cont ext o para
especificar la estructura sintáctica de la entrada. A cada símbolo de la gramática le asocia un
conjunto de atributos y a cada producción, un conjunto de reglas semánticas para calcular los
valores de los atributos asociados con los símbolos que aparecen en esa producción. La
gramática y el conjunto de reglas semánticas constit uyen la definición dirigida por sintaxis
Una Traducción es una transformación de una entrada en una salida. La salida para cada
entrada X se especifica de la forma siguiente
Prim ero: Se construye un árbol de análisis sintáctico para x. Supóngase que un nodo n del
árbol de análisis sintáctico está etiquetado con el símbolo X de la gramática. Se escribe X.a
para indicar el valor del atributo de a de X en ese nodo. El valor de X.a en n se calcula por la
regla semántica para el atribut o de a asociado con la producción de X utilizado en el nodo n. Al
árbol de análisis sint áct ico que muestre los valores de los atributos en cada nodo se dice qu e
es un árbol de análisis sint áctico con anotaciones
Es decir, el significado de cada construcción gramat ical, representada típicam ent e por un no
terminal, solo debe depender de los elementos que aparecen en la part e derecha de sus reglas
de producción.
La lect ura práctica que debe hacerse de est e principio es que para establecer la semántica de
un lenguaje es suficient e con hacerlo sobre cada una de sus reglas de producción de manera
independient e. Esto a su vez se consigue estableciendo una traducción de los elem entos de la
parte derecha de la regla a una representación con un significado computable específico.
OF Tipo;
Las traducciones con significado computacional específico a las que ant es hacíamos referencia
se pueden clasificar en 2 grandes grupos dependiendo del momento en que se aplican dentro
del ciclo de compilación.
Las traducciones en tiempo de compilación son acciones que se aplican sobre los art efactos del
compilador y que tienen efecto durante el proceso de compilación.
3. Análisis sintáctico
El analizador sintáctico obtiene una cadena de component es léxicos del analizador léxico, y
comprueba si la cadena puede ser generada por la gramática del programa fuent e.
Se considera un intent o de encontrar una derivación por la izquierda para una cadena de
entrada.
También se puede considerar como un int ent o de construir un árbol de análisis sintáctico para
la entrada comenzando desde la raíz y creando nodos del árbol en orden previo.
Construye árboles de análisis sintáctico desde arriba (raíz) hacia abajo (hojas). El análisis se
realiza de lo general a lo particular.
Construyen árboles de análisis sintáctico comenzando en las hojas y suben hacia la raíz. El
análisis se realiza de lo particular a lo general.
Sint axis abst racta y concreta: un punto de partida út il para considerar la t raducción de una
cadena de entrada es un árbol de sintaxis abstracta, donde cada nodo representa un operador,
y los hijos de ese nodo, los operandos. Por contraste, un árbol de análisis sintáct ico se
denomina árbol de sintaxis concreta, y la gramática subyacent e, sintaxis concreta del lenguaje.
Los arboles de sintaxis abstract a, o simplement e arboles sintáct icos difieren de los árboles de
análisis sintáctico en que las distinciones superficiales de forma, sin importancia en la
traducción, no aparecen en los arboles sintácticos.
Ejemplo:
El árbol sintáctico para 9-5+2 se muestra a continuación, dado que + y – tiene el mismo nivel
de precedencia, y los operadores con igual nivel de precedencia, se evalúan de izquierda a
derecha, el árbol presenta 9-5 agrupado como una buena expresión.
5. Análisis léxico,
El análisis léxico constituye la primera fase, aquí se lee el programa fuente de izquierda a
derecha y se agrupa en component es léxicos (tokens), que son secuencias de caracteres que
tienen un significado. Además, todos los espacios en blanco, líneas en blanco, comentarios y
demás información innecesaria se elimina del programa fuent e. También se comprueba qu e
los símbolos del lenguaje (palabras clave, operadores, et c.) se han escrito correctam ent e.
Como la tarea que realiza el analizador léxico es un caso especial de coincidencia de pat rones,
se necesitan los métodos de especificación y reconocimiento de patrones, se usan
principalment e los aut ómatas finit os que acept en expresiones regulares. Sin embargo, un
analizador léxico también es la part e del t raductor que maneja la entrada del código fuent e, y
puesto que est a entrada a m enudo involucra un im portant e gast o de tiempo, el analizador
léxico debe funcionar de manera tan eficient e como sea posible.
La tabla de símbolos es una estructura de datos que nos permit e realizar operaciones de
inserción, búsqueda y eliminación de información en varias construcciones del lenguaje
fuent e, la cual es analizada por el compilador originándose un código objet o.
Inserción: Almacena información proporcionada por las declaraciones de nombre cuando estas
son procesadas.
Búsqueda: Recupera la información asociada con un nombre cuando est e se utiliza en una
declaración o el código asociado.
Una máquina de pila abstracta se basa en una estruct ura de pila, una memoria independient e
para las instrucciones y los datos y tres conjuntos de inst rucciones: las aritmét icas, las de
manipulación de la pila y las de control de flujo.
Así, para calcular la expresión (2+4)* 5, se ejecutarían las siguient es instrucciones (24+5* ):
3. Lee el operador +, extrae los dos prim eros valores de la pila, los suma e inserta el resultado
(6) Tema 1 Lenguajes interpret ados.
2. Compiladores 2
4. Lee el operador * , y extrae los dos prim eros valores de la pila, ejecuta la operación e insert a
el resultado (30).
La máquina abstracta trabaja con núm eros ent eros y soporta las instrucciones aritméticas
habituales; cada uno de estos operadores arit méticos (+, -, * , / ) define una operación que se
ha de aplicar sobre los dos prim eros valores de la cima de la pila. Cuando la máquina lee un
operador, extrae los dos prim eros valores de la pila, aplica la operación e int roduce en
resultado en la pila. El conjunto de instrucciones está formado por 18 elem entos.
En binario se pueden codificar utilizando 5 bits, con lo que se pueden generar 32 elem entos
(25); por tanto, en una codificación de 5 bits, t odavía dispondríamos de 14 posiciones libres
para ampliar el conjunto de instrucciones. Dado que un intérpret e para la máquina de pila
abstracta se podría implem entar para muchas máquinas diferent es, es muy important e que la
especificación recoja aspect os propios del hardw are como el tamaño en bits de los datos o el
tamaño de la memoria.