1. Instituto tecnol´gico de Costa Rica
o
Ingenier´ en Computadores
ıa
Ver´nica Mora Lezcano
o
Lenguajes, compiladores e int´rpretes
e
Int´rpretes
e
• Tienen como salida principal instrucciones ejecutables.
• El rendimiento del int´rprete es m´s lento, se somete al rendimiento de realizar la traducci´n uno
e
a
o
a uno.
• Tiende a ser m´s portable e independiente de la arquitectura.
a
• Se requiere del programa fuente para su ejecuci´n.
o
• Se detectan los errores en la ejecuci´n del programa.
o
• Es m´s flexible para que el programa pueda usar la memoria.
a
Compilador
• Tiene como salida un unico lenguaje objeto.
´
• El rendimiento en la ejecuci´n del programa compilado (la salida) es m´s r´pido que el
o
a a
interpretado.
• La salida puede depender de la arquitectura.
• No requiere del programa fuente porque el programa objeto es ejecutable.
***Puede ser secreto el programa fuente***
• Los errores sint´cticos y sem´nticos se detectan antes de la ejecuci´n del programa.
a
a
o
• Tiene menos flexibilidad en el uso de la memoria para el programa objeto.
Taxonom´ de los compiladores
ıa
• Cruzado: compiladores para pasar de un lenguaje de alto nivel a otro de alto nivel tambi´n. Por
e
ejemplo, Java -¿ C++
• Optimizadores: compiladores espec´
ıficos, se encargan de la mejor depuraci´n.
o
• Una pasada: una unica lectura de entrada.
´
• Varias pasadas: m´s de una lectura.
a
• JIT (Just In Time): h´
ıbrido entre compilador e int´rprete.
e
• Ensamblador: utilizan n´meros.
u
o
o
– Nmonico: relaci´n uno a uno entre el lenguaje simb´lico y el binario.
Por ejemplo:
1
2. Recordando el compilador posee seis fases, como se muestra en la imagen.
Otros elementos alrededor de un compilador
• Preprocesador
– Se encarga de unificar el programa fuente para poder realizar las fases del compilador.
– Carga de bibliotecas.
– Carga de subclases, superclases, ...
• Carga y enlace (del sistema operativo)
2
3. – Resuelve direcciones de memoria
– De acceso a la parte de asignaci´n de la memoria y recursos f´
o
ısicos
• IDE
Son utilizados por los programadores y tienen funciones adicionales relacionadas a la est´tica o la
e
interacci´n con el manejo de errores.
o
Ejemplo:
Para la siguiente expresi´n.
o
posici´n = inicial + velocidad * 60
o
• Analizador l´xico
e
id1 = id2 + id3 * 60
• Analizador sint´ctico
a
• Analizador sem´ntico
a
• Generador de c´digo intermedio
o
temp1 = real( 60 )
temp2 = id3 * temp1
temp3 = id2 + temp2
id3 = temp3
• Optimizador de c´digo
o
temp1 = id3 *60 id1 = id2 + temp1
• Generador de c´digo
o
3
4. mov f id3, r2
mul f 60, r2
mov f id2, r1
add f r2, r1
mov f r1, id1
• Administrador de la tabla de s´
ımbolos
Consideraciones de dise˜o de un compilador
n
• Lenguaje fuente
– Tama˜o del lenguaje.
n
– Cambio del lenguaje mientras se construye el compilador.
∗ Modularizar componentes ayuda a enfrentar el cambio.
• Lenguaje objeto
– Si es nuevo debe asegurarse que sea correcto.
– Producci´n para varias generaciones de m´quina objeto.
o
a
• Rendimiento
– Debe ser r´pido.
a
– Cantidad de c´digo.
o
– Localizaci´n de errores.
o
– Mantenimiento.
– Transportabilidad.
∗ Redestinaci´n: pueda cambiar el c´digo objeto que genera.
o
o
∗ Relocalizaci´n: puede ejecutarse f´cilmente en maquinas distintas
o
a
Lenguajes de programaci´n
o
Es un dise˜o formal para expresar procesos que pueden ser ejecutados por una m´quina. Manipulan el
n
a
comportamiento de la m´quina, es decir, reglas de c´mo se quiere que funcione.
a
o
Taxonom´ de lenguajes (por abstracci´n)
ıa
o
• Primera generaci´n: binario.
o
• Segunda generaci´n: lenguajes simb´licos.
o
o
• Tercera generaci´n: alto nivel, tienen estructuras independientes de la m´quina (C, Pascal, Java).
o
a
4
5. • Cuarta generaci´n: construcci´n de aplicaciones con piezas prefabricadas.
o
o
• Quita generaci´n: de uso espec´
o
ıfico. El programador conoce el problema y el lenguaje puede
ayudar a resolverlo a partir de reglas (ejemplo: l´gicos).
o
Los lenguajes de cuarta y quinta generaci´n no est´n completamente aceptados.
o
a
Taxonom´ de lenguajes (por su gram´tica)
ıa
a
Una gram´tica describe de forma natural la estructura jer´rquica de la construcci´n de lenguajes de
a
a
o
programaci´n.
o
Son reglas y principios que predicen correctamente las combinaciones de oraciones de un lenguaje.
Ejemplo del lenguaje espa˜ol:
n
Para comprender mejor la idea, se puede considerar un modelo para el espa˜ol.
n
1. Oraci´n – sujeto, predicado.
o
2. Sujeto – determinante, nombre.
3. Predicado – verbo complemento.
4. Nombre – ni˜o — hombre — anciano.
n
5. Verbo – duerme — r´
ıe— come.
6. Complemento – pl´cidamente — intranquilo.
a
¿C´mo resuelve la gram´tica de las siguientes oraciones?
o
a
1) El ni˜o duerme intranquilo.
n
2) El hombre r´
ıe.
5
7. Gram´ticas Regulares
a
Es una secuencia de caracteres que forma un patr´n de b´squeda.
o
u
Operaciones
• + : aparece 1 o m´s veces.
a
• ? : aparece m´ximo 1 vez.
a
• * : aparece 0 o m´s veces (cerradura de Kleene).
a
o
´ () : agrupaci´n.
o
• — : OR.
• - : rangos: ejemplo A-Z ´ O-9.
o
Otras variantes
• $ : fin
• Potencias
Reglas de las Expresiones Regulares
Gram´ticas libres de contexto
a
• Conjunto de componentes l´xicos denominados s´
e
ımbolos terminales.
• Conjunto de componentes l´xicos denominados No Terminales.
e
• Producciones conformadas de No Terminales y Terminales.
• Definici´n de un No Terminal como s´
o
ımbolo inicial.
S´
ımbolos terminales
• Se denotan en min´scula.
u
• Se pueden visualizar como las hojas de un ´rbol sint´ctico.
a
a
7
8. • En las gram´ticas libres de contexto solo se encuentran en la parte derecha de la producci´n.
a
o
Producciones Se denotan con may´scula. Tiene dos partes, el Nombrado (No terminal) y la parte
u
derecha que indica la sustituci´n, y puede tener terminales y no terminales.
o
Por ejemplo:
• Gram´tica que permite operaciones de suma y resta.
a
Para la operaci´n: 6 + 8 - 9, se representar´
o
ıa:
• Gram´tica que permite operaciones de multiplicaci´n, divisi´n, suma y resta; donde la
a
o
o
multiplicaci´n y divisi´n tienen prioridad.
o
o
Op −→ Op + Op | Op - Op | Lista
Lista −→ Lista * Dig | Lista / Dig | Dig
Dig → [0-9]*
• Gram´tica que permite operaciones de multiplicaci´n, divisi´n, suma y resta; donde la
a
o
o
multiplicaci´n y divisi´n tienen prioridad, y se permite la utilizaci´n de par´ntesis.
o
o
o
e
Op −→ Op + Op | Op - Op | Lista
Lista −→ Lista * Dig | Lista / Dig | Dig
Dig → [0-9]* | (Op)
Propiedades de las gram´ticas
a
Cuando se dise˜a o elabora una gram´tica se busca que no sea Ambigua (se dice que una gram´tica es
n
a
a
Ambigua cuando se pueden construir 2 ´rboles sint´cticos para una misma entrada).
a
a
8
9. Por ejemplo:
Operaci´n −→ Operaci´n + Operaci´n
o
o
o
Para la operaci´n 1+2+3, se puede crear los siguientes arboles:
o
Ambig¨ edad del IF
u
IFCOND −→ if (EXP) then SENTENCIAS else SENTENCIAS | if (EXP) then SENTENCIAS
EXP −→ EXP + TERMINO | EXPTERMINO | TERMINO
SENTENCIAS −→ EXP; SENTENCIAS* | println (“Hola”); SENTENCIAS* | IFCOND
TERMINO −→ [0-9]*
Ejemplo:
if (1 + 2) then 3 + 4;
if (3 + 4) then 6 + 7;
else 8 + 9;
9