Anda di halaman 1dari 18

Disponible en: http://www.ingenieriasimple.

com/compiladores
Componente
Léxico (Token)
Arbol de Resto de Código
Programa Analizador Analizador Análisis
Fuente Etapa Inicial Intermedio
Léxico sintáctico Sintáctico
GetNextToken()

Tabla de
Símbolos
 Léxicos
◦ Escribir mal algo (fi en lugar de if)
 Sintácticos
◦ Paréntesis no equilibrados
◦ If sin Then
 Semáticos
◦ Llamada a función con parámetros de tipo
incorrecto
 Lógicos
◦ Recursión infinita
◦ Run time error
 Objetivos
◦ Informar de los errores con claridad
 Lugar donde ocurrió el error
◦ Recuperarse de los errores
 Varias estrategias
◦ No retrasar el análisis en programas correctos
Var
x, y : integer;
Function max(i: integer; j: integer) : integer;
{devuelve el máximo de los enteros i y j}
Begin
if i > j then max := i
else max := j
End;

Begin
readln(x,y);
writeln(max(x,y))
End.
 En modo de pánico
 A nivel de frase
 De producciones de error
 De corrección global
 Se descubre el error
 Se desechan símbolos de entrada
 Se llega a un componente de sincronización

◦ ; end loop then


◦ Se debe definir cuáles se usarán
 Puede desechar gran parte de la entrada
 Garantiza recuperación
 Identificar prefijo para la entrada restante
 Ejemplo
◦ If while not true then ...
◦ Entrada restante: not true then...
◦ Prefijo identificable: if
◦ Corrección: if not true then ...
 Difícil de implementar
 Se identifican patrones de error
 Se incluyen producciones para esos patrones
 Si la producción se usa...

◦ Corregir en reglas semánticas


 Modificar la gramática
 Identificar todas las posibles variaciones
 Evaluar la mínima
 Utilizarla
Las primeras computadoras se
programaban mediante cables o tableros
de interruptores, que introducían el
programa directamente en los circuitos de
la tarjeta.

Pero este sistema era muy poco flexible y


pronto se sustituyó por otros más
manejables, como la cinta de papel
perforado y la tarjeta de cartulina
perforada. Las cintas y tarjetas se
perforaban mediante máquinas provistas
de teclados especiales.
El programa se escribía directamente en código binario y
podía representarse mediante secuencias de ceros y unos
(bits, abreviatura inglesa de "dígitos binarios").

Como el código binario es largo y muy poco legible, los


programadores en el lenguaje de máquina suelen utilizar
como abreviatura los sistemas de numeración octal (en
base 8), si el número de "bits" es múltiplo de 3, o
hexadecimal (en base 16), si el número de "bits" es
múltiplo de 4.

Una instrucción máquina se expresaría en estos códigos


así:
Octal 22022317 Hexadecimal 4824CF

Dado a que esto es un poco incómodo, el código máquina


se suele escribir en Ensamblador y posteriormente se
ensambla a código máquina
Un ensamblador es una aplicación
de sistema que se encarga de
traducir un fichero fuente escrito en
un lenguaje ensamblador, a un
fichero objeto que contiene código
o lenguaje máquina, entendible por
la máquina para la que se ha
generado.
 Ensambladores básicos. Son de muy bajo nivel, y su tarea consiste
básicamente en ofrecer nombres simbólicos a las distintas
instrucciones de la máquina apropiada llamados OpCodes, además
de ofrecer un formato de escritura cómodo para expresar los
parámetros y cosas tales como los modos de direccionamiento.
Además, reconoce una serie de Directivas (o meta intrucciones)que
indican ciertos parámetros de funcionamiento del Ensamblador.

 Ensambladores modulares, o macro ensambladores. Descendientes


de los ensambladores básicos, fueron muy populares en las décadas
de los 50 y los 60, antes de la generalización de los lenguajes de
alto nivel. Hacen todo lo que puede hacer un ensamblador, y además
proporcionan una serie de Directivas para definir e invocar macro
instrucciones (o simplemente, Macros). Cuando invocamos a una
Macro, ésta se expande al cuerpo que hayamos definido.
Video

Anda mungkin juga menyukai