Académique Documents
Professionnel Documents
Culture Documents
m
Ô
Õ
!"
No se necesita conocer la
forma en que se colocan
los datos en memoria Gran variedad de
Más fáciles de estructuras de
aprender control
Mentajas de los
Mayor capacidad Lenguajes de Alto Nivel Diseño modular
de creación de de programas
estructuras de
datos §oporte para la
P.O.O.
Los programas se depuran
más fácilmente que los Relativamente
escritos en lenguaje máquina independientes
o ensamblador de la máquina
Õ
!"
|raductor V V
V
ënsamblador
Lenguaje ensamblador
Lenguaje máquina
ompilador
Lenguaje de alto nivel Lenguaje máquina
Õ
!"
m
Õ
!"
6ntérpretes
Programa
Lenguaje
Resultados
fuente máquina
Programa
fuente Resultados
Decompilador
Lenguaje máquina
Lenguaje de alto
nivel
Desensamblador
Lenguaje máquina
Lenguaje
ensamblador
Õ
!"
Depuradores
Herrramientas que permiten encontrar y corregir errores de los
programas (suelen ir ligados a los compiladores)
Analizadores de rendimiento
Herramientas que permiten examinar el comportamiento de los
programas en tiempo de ejecución, permitiendo comprobar qué zonas
de código trabajan eficientemente y cuáles deberían ser revisadas por
su bajo rendimiento.
Optimizadores de código
Herramientas independientes o están incluidas en los compiladores
que optimizan la velocidad de ejecución, tamaño de código ejecutable,
eliminación de código muerto o no utilizado, funciones no utilizadas, etc.
ompresores
Herramienta habitual para reducir el tamaño de archivos, (ficheros
ejecutables). W6N Z6P
Õ
!"
Preprocesadores
aso especial de traductor. |raduce un lenguaje de alto nivel a
´otroµ, cuando el primero no puede pasar a lenguaje máquina
directamente. Procesan un texto fuente modificándolo en cierta forma
previamente a la compilación.
Formateadores
ëstablen cierto ´formatoµ. De muchos tipos y diferentes fines:
formatear texto, formatear ecuaciones, formatear programas (resaltan
la sintaxis a su estructura para lo cual es necesario conocer la sintaxis
del programa a formatear). onversores de formato.
ëditores
Los editores de lenguajes de programación con sintaxis resaltada por
medio de colores o tipos de letra permiten llamar la atención del
programador en el momento mismo que está escribiendo el programa,
sin necesidad de compilar, dado que llevan incorporada la sintaxis del
lenguaje.
Õ
!"
ompilador
m
Lenguaje de alto nivel Lenguaje máquina
Metacompilador Autocompilador
ompilador
cruzado
ënsamblador
ompilador de
montaje y
ompilador ejecución
ompilador de
incremental
pasadas múltiples
ompilador ompilador en
optimización una pasada
Õ
!"
Proceso de
!"#$"
ompilación
%&"$
"V V#$
Pareja de Buffers
entinelas
"V V#$
ëxpresiones regulares
Notación para especificar patrones. ada patrón concuerda con una
serie de cadenas, de modo que las expresiones regulares servirán como
nombres para conjuntos de cadenas.
Las expresiones regulares se utilizan para describir los componentes
léxicos de un lenguajes o tokens. Las expresiones regulares utilizan varios
tipos de operadores para definir los componentes léxicos:
Paréntesis. Para agrupar símbolos
Operación concatenación. §e permite la concatenación de cadenas.
Operación alternativa. §e representa por |, y permite la elección entre
dos o más alternativas.
Abreviaturas en la notación
1. Uno o más casos de. +
2. ero o un caso. ?
3. lases de caracteres.
Notación abreviada para las expresiones regulares.
a|b|c|d|...|z lase de caracteres: [a-z]
a|b|c [abc]
0|1|2|3|«|9 [0-9]
id [A-Za-z] [A-Za-z0-9]*
onjuntos no regulares
Aquellos lenguajes que no se pueden describir con ninguna expresión
regular.
"V V#$
donde, los terminales if, else, operel, id y num generan conjuntos de cadenas
dados por las siguientes definiciones regulares:
if if
else else
operel < | <= | = | <> | > | >=
6d letra (letra|digito)
num digito (.digito ) ( ë(+|-) digito )
letra y digito (se definieron anteriormente)
"V V#$
#
$
Ú
Ú
$
!"
|erminales
No terminales
Un símbolo inicial
Producciones
"V
Análisis §intáctico
6zquierda-Derecha LR (k) |écnica eficiente de análisis
sintáctico ascendente. §e realiza un examen de la entrada de izquierda a
derecha, así también se contruye una derivación por la derecha.
Reconocen prácticamente todas las construcciones de los lenguajes de
programación para los que se pueden escribir gramáticas independientes
del contexto. Puede detectar un error sintáctico tan pronto como sea
posible hacerlo en un examen de izquierda a derecha de la entrada.
"V
Merificador de |ipos
omponente importante del análisis
semántico. Aquí, el compilador verifica si cada operador tiene
operandos permitidos por la especificación del lenguaje fuente.
x
!"
omprobador de |ipos
(estática y dinámica)
omprobación Dinámica
§e realiza durante la
ejecución del programa objeto.
"V "
omprobación ëstática
omprueba si el programa
fuente sigue las convenciones sintácticas y semánticas del lenguaje
fuente. Garantiza la detección y comunicación de algunas clases de
errores de programas.
§istema de |ipos
§erie de reglas para asignar expresiones de tipos a las distintas partes
de un programa y verificar su corrección.
Lo forman las definiciones y reglas que permiten comprobar cuál es el
dominio asignado a una variable, y en qué contextos puede ser usada.
ël comprobador de tipos implanta el §istema de |ipos
6ncluye comprobaciones estáticas y dinámicas.
"V "
ë PLÏ6|A 6MPLÍ6|A
ël programador debe escribir §i la realiza el compilador
algo para motivar la conversión. automáticamente (coerciones)
"V "
§obrecarga de funciones
§e presenta cuando un
símbolo tiene distintos significados dependiendo de su contexto
(operadores aritméticos).
§e resuelve cuando se determina un significado único para un caso de
un símbolo sobrecargado.
Funciones polimórficas
ualquier parte de código que
puede ejecutarse con argumentos de tipos distintos (funciones,
operadores).
Facilitan la implantación de algoritmos que manipulan estructuras de
datos.
%Õ%Õ
Õ
Lenguajes intermedios
Los árboles sintácticos y la notación postfija son dos clases de
representaciones intermedias.
ëxpresiones booleanas
ën los lenguajes de programación, las expresiones booleanas tienen dos
propósitos principales. §e utilizan para calcular valores lógicos y como
expresiones condicionales en proposiciones que alteran el flujo del control,
como las proposiciones if-else o do-while.
Las expresiones booleanas se componen de los operadores
boleanos (and, or y not) aplicados a los elementos que son variables
booleanas o expresiones relacionales. Algunos lenguajes permiten
expresiones más generales donde se pueden aplicar operadores booleanos,
aritméticos y relacionales a expresiones de cualquier tipo, sin diferenciar
valores booleanos de aritméticos; si es necesario se realiza una coerción.
%Õ%Õ
Õ
ëxpresiones
Pueden ser de tipo entero, real, matriz , registros. ën la |abla de
§ímbolos se puede buscar los nombres de las expresiones y se puede
acceder a los elementos de matrices y registros.
ëstos nombres representan a las expresiones dentro de la |abla de
§ímbolos.
Declaraciones
onforme se examina la secuencia de declaraciones dentro de un
procedimiento o un bloque, se puede distribuir la memoria para los nombres
locales al procedimiento. Para cada nombre local se crea una entrada en la
tabla de símbolos con información, por ejemplo, referente al tipo y la
dirección relativa de la memoria correspondiente al nombre.
La sintaxis de lenguajes como , Pascal y FOR|RAN permite que todas
las declaraciones en un solo procedimiento se procesen como un grupo.
%Õ%Õ
Õ
Llamadas a funciones/procedimientos
ës fundamental que un compilador genere buen código para llamadas
y retornos de funciones. La traducción de una llamada incluye una
secuencia de llamada, que es una secuencia de acciones que se toman
a la entrada y a la salida de cada función/procedimiento.
Aunque las secuencias de llamada difieren, incluso en aplicaciones del
mismo lenguaje, habitualmente tienen lugar las siguientes acciones:
uando ocurre la llamada a un función, se debe asignar espacio para
el registro de activación del procedimiento llamado. Los argumentos
de la función llamada se deben evaluar y poner a disposición de la
función llamada en un lugar conocido. §e deben establecer los
apuntadores de ambiente para permitir que la función llamada tenga
acceso a los datos de las funciones abarcadoras.
%Õ%Õ
Õ
|abla de §ímbolos
ëstructura de datos que contiene
un registro por cada identificador con los campos para los atributos del
identificador.
Atributos para un
identificador/variable
Análisis sintáctico y
semántico
Producciones de error
orreción global
§i se tiene una buena idea
6dealmente, sería deseable que
de los errores comunes que
un compilador hiciera el mínimo
pueden encontrarse, se puede
de cambios posibles al procesar
aumentar la gramática del
una cadena de entrada
lenguaje con producciones que
incorrecta. ëxisten algoritmos
generen las construcciones
para elegir una secuencia mínima
erróneas. ëntonces se usa
de cambios para obtener una
esta gramática aumentada con
corrección global de menor
las producciones de error para
costo; por desgracia, la
construir el analizador
implantación de estos métodos
sintáctico.
es en general demasiado
costosa en términos de tiempo y
espacio.
Õ
Õ
§ímbolos de ërror
ël compilador, al detectar un error, maneja símbolos de error en la
|abla de ërrores para manejar dichos errores.
Al agregar estos símbolos de error, se indica el número de línea en que
se localiza el error, el tipo de error que corresponde, las localidades de
memoria que afecta, etc.
Un buen compilador maneja el error, el símbolo de error que lo
identifica y su posterior recuperación de manera casi inmediata.
|abla de ërrores
ël compilador utiliza el Manejador de errores para la detección y
recuperación de los mismos, implementando una |abla de ërrores.
ël módulo de ërrores administra la emisión de informes de error, que
es muy primitivo: al encontrar un error de sintaxis, el compilador imprime un
mensaje informando de un error en la línea en curso y después se detiene.