Resumen Capitulo 1

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 3

Introducción.

Los lenguajes de programación son notaciones q u e describen los cálculos a las personas y las
máquinas.Nuestra percepción del mundo en que vivimos depende de los lenguajes de
programación, y a que todo el software que se ejecuta en todas las computadoras se escribió en
algún lenguaje de programación. Pero antes de poder ejecutar un programa, primero debe
traducirse a un formato en el que una computadora pueda ejecutarlo.

Los sistemas de software que se encargan de esta traducción se llaman compiladores. Este libro
trata acerca de cómo diseñar e implementar compiladores. Aquí descubriremos que podemos
utilizar unas cuantas ideas básicas para construir traductores para una amplia variedad de
lenguajes y máquinas. Además de los compiladores, los principios y las técnicas para su diseño
se pueden aplicar a tan tos dominios distintos aparte, que es probable que un científico
computacional las reutilice muchas veces en el transcurso de su carrera profesional.

El estudio de la escritura de los compiladores se relaciona con los lenguajes de programación, la


arquitectura de las máquinas, la teoría de lenguajes, los algoritmos y la ingeniería de software.

Procesadores de lenguaje

Dicho en forma simple, un compilador es un programa que puede leer un programa en un


lenguaje (el lenguaje fu ente) y traducirlo en un programa equivalente en otro lenguaje (el
lenguaje destino). Una función importante del compilador es reportar cualquier error en el
programa fuente que detecte durante el proceso de traducción.

Un intérprete es otro tipo común de procesador de lenguaje. En vez de producir un programa


destino como una traducción, el intérprete nos da la apariencia de ejecutar directamente las
operaciones especificadas en el programa de origen (fuente) con las entradas proporcionadas por
el usuario.

La estructura de un compilador

Hasta este punto, hemos tratado al compilador como una caja simple que mapea un programa
fuente a un programa destino con equivalencia semántica. Si abrimos esta caja un poco,
podremos ver que hay dos procesos en esta asignación: análisis y síntesis.
La parte del análisis divide el programa fuente en componentes e impone una estructura
gramatical sobre ellas. Después utiliza esta estructura para crear u n a representación intermedia
del programa fuente. Si la parte del análisis detecta que el programa fuente está mal formado en
cuanto a la sintaxis, o que no tiene una semántica consistente, entonces debe proporcionar
mensajes informativos para que el usuario pueda corregirlo. La parte del análisis también
recolecta información sobre el programa fuente y la almacena en una estructura de datos llamada
tabla de símbolos, la cual se pasa junto con la representación intermedia a la parte de la síntesis.

La parte de la síntesis construye el programa destino deseado a partir de la representación


intermedia y de la información en la tabla de símbolos. A la parte del análisis se le llama
comúnmente el front-end del compilador; la parte de la síntesis (propiamente la traducción) es el
back-end.

Análisis de léxico.

A la primera fase de un compilador se le llama análisis de léxico o escaneo. El analizador de


léxico lee el flujo de caracteres que componen el programa fuente y los agrupa en secuencias
significativas, conocidas como lexemas. Para cada lexema, e l analizador léxico produce como
salida un token de la forma: (nombre-token, valor-atributo), que pasa a la fase siguiente, el
análisis de la sintaxis. En el token, el primer componente nombre-token es un símbolo abstracto
que se utiliza durante el análisis sin táctico, y el segundo componente valor atributo apunta a una
entrada en la tabla de símbolos para este token. La información de la entrada en la tabla de
símbolos se necesita para el análisis semántico y la generación de código.

Análisis sintáctico

La segunda fase del compilador es el análisis sintáctico o parsing. El parser (analizador


sintáctico) utiliza los primeros componentes de los tokens producidos por el analizador de léxico
para crear una representación intermedia en forma de árbol que d escriba la estructura gramatical
del flujo de tokens. Una representación típica es el árbol sintáctico, en el cual cada nodo interior
representa una operación y los hijos del nodo representan los argumentos de la operación.
Análisis semántico.

El analizador semántico utiliza el árbol sintáctico y la información en la tabla de símbolos para


comprobar la consistencia semántica del programa fuente con la definición del lenguaje.
También recopila información sobre el tipo y la guarda, ya sea en el árbol sintáctico o en la tabla
de símbolos, para usarla más tarde durante la generación de código intermedio.

Una parte importante del análisis semántico es la comprobación (verificación) de tipos, en donde
el compilador verifica que ca d a operador tenga operandos que coincidan. Por ejemplo, muchas
definiciones de lenguajes de programación requieren que el índice de un arreglo sea entero; el
compilador debe reportar un error si se utiliza un número de punto flotan te para indexar el
arreglo.

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 sin táctico y semántico.

Después del análisis sin tá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.

Optimización de código

La fase de optimización de código independiente de la máquina trata de mejorar el código


intermedio, de manera que se produzca un mejor código destino. Por lo general, mejor significa
más rápido, pero pueden lograrse otros objetivos, como un código más corto, o un código de
destino que consuma menos poder.

También podría gustarte

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy