Professional Documents
Culture Documents
EPCI - UNPRG
COMPILADORES E INTERPRETES
Anlisis semnt ico: Estudia el significado de la sentencia Procesadores de lenguaje: Convier te un programa fuente hecho en un lenguaje fuente a un programa objeto hecho en un lenguaje objeto. En consecuencia, es un programa que esta hecho en maquina virtual y es transformado a un programa que entienda la maquina real. Observe el esquema: El lenguaje objeto es creado por el compilador, el cual debe estar preparado para el sistema operativo en el que ser ejecutado y a la arquitectura respectiva del hardware. Por ejemplo, existen compiladores que a un programa fuente lo transforman a ejecutable para Windows (arquitectura CISC) o para MacOS (arquitectura RISC).
Compilador Program a fuente (hecho en Pascal) (hecho en lenguaje C++) Maquina Virtual (Generado por SO) para Programa fuente (hecho en Leng. Fuente)
CONVERTIR para
Maquina Real
Firmware (microprograma ubicado en la ROM) Especie de caja negra (no perceptible por el usuario)
Lenguaje fuente
Lenguaje de implementacin
Lenguaje objeto
Un SO de arquitectura propietaria son aquellas que restringen el desarrollo de aplicaciones slo a esa misma familia de SO, por ejemplo, Windows: sus aplicaciones no pueden ser ejecutadas por otros SO tal como MacOS o LINUX
Interprete Java (utiliza bytecode) Lenguaje de implementacin C++ Sistema Computacional
P or eso se dice que el Java es el sucesor del C ++
Un SO de arquitectura abierta es aquel en que sus aplicaciones pueden ser ejecutadas en cualquier otro SO, como por ejemplo LINUX puede ser instalado en cualquier arquitectura como CISC o RISC, es decir se puede instalar en una PC o una Mac (Apple) respectivamente. Existen decompiladores que transforman un exe a cdigo fuente. Pero, debe saberse de antemano cual fue el lenguaje que lo origin.
Compiladores e Interpretes
EPCI - UNPRG
Compilador
Ensamblador
Funcionalidad: Toma todo el programa fuente y genera las instrucciones mquina (Prog.objeto), inclusive genera el exe que es igual al Prog.objeto+cargadores (rutinas de ejecusin del SO). Interpretes
P rograma F uente (Len g. de alto niv el) P rograma objeto (Len g. objeto o mquina)
Interprete
Funcionalidad: Toma el programa fuente y genera instr ucciones mquina necesarias sentencia por sentencia (fuente) sobre la marcha. Muchas veces no genera el ejecutable y para esto nec esita del software de apoyo (linker). Estructura de un compilador
Etapa de Anlisis
Etapa de Sntesis
PROG. FUENTE
PROG. OBJETO
ANALISIS LEXICO Es un anlisis lineal Se da de izquierda a derecha Necesita de un analizador lxico o scaner
Compiladores e Interpretes
EPCI - UNPRG
Funcionalidad: Se encarga de disponer el programa fuente en unidades sintcticas, es decir, palabras con significado propio, denominados componentes lxicos o tokens. Por ejemplo: palabras reservadas, identificadores, constantes, operadores aritmticos, operadores relacionales, operadores lgicos, smbolos de asignacin, smbolos de puntuacin o caracteres especiales del lenguaje, etc. Elimina los caracteres en forma de espacios en blanco, ejemplo: espacio en blanco, tabulaciones y saltos de lnea. Elimina los comentarios. Actualiza la tabla de smbolos uniformes, que es la contenedora de todos los tokens del programa fuente actual. Conceptos bsicos: Palabra reservada: Es aquella palabra del propio lenguaje de programacin que no se puede usar como identificador de variables ni como funciones de usuario. Mayormente todas las palabras clave son reservadas, pero algunas palabras reser vadas no siempre son palabras clave. Ejemplo de palabras claves: main, if, else, switch, while, do, etc. Ejemplo de palabras reservadas: printf(), scanf(), getch(), putpixel() , gotoxy(), etc. Estas ltimas palabras son reservadas, pero no son palabras clave ya que pueden ser creadas por el usuario como funciones pr opias, siempre y cuando no se usen las libreras del C++.
token
printf ( %d , dato);
Identificador de funcin
Identificador de variable
Tabla de smbolos unifor mes: Se basa en: Tabla de terminales (palabras reservadas) Tabla de identificadores (variables) Tabla de literales (constantes)
ANALISIS SINTA CTICO Es un anlisis de tipo jerrquico. Necesita de un analizador sintctico o mdulo denominado Parser Funcionalidad: Verifica en forma permanente la correcta escritura de las sentencias, teniendo como parmetros un conjunto de reglas denominada gramtica. Una gramtica se representa formalmente o matemticamente en base a un cudr uple de la forma: G = ( P, T, N, S), donde: P = Producciones o reglas T = Conjunto de terminales N = Conjunto de no terminales S = Axioma, smbolo distinguido o metanocin
Compiladores e Interpretes
EPCI - UNPRG
Sigue la forma BNF (Backus Naur Form) que coincide con la gramtica de libre contexto de Chomsky. Ejemplo: Reglas para el reconocimiento de una sentencia de asignacin: 1. Un identificador es una expresin. 2. Un nmer o es una expresin. 3. Pueden darse los siguientes casos: expresin + expresin expresin - expresin expresin * expresin expresin / expresin Todas ellas son expresiones 4. Identificador = expresin es una proposicin. Transformando estas reglas a BNF, sera:
exp id exp num exp exp + exp exp exp - exp exp exp * exp exp exp / exp prop id = exp exp id | num | exp + exp | exp - exp | exp * exp | exp / exp prop id = exp
O SE PUEDE REPRESENTAR
Ahora planteemos estas reglas o producciones a una sentencia de asignacin: X=A +3* C-5 prop = P: {exp id | num | exp + exp | exp - exp | id = exp exp * exp | exp / exp X * prop id = exp } X exp * exp + T: {X,=,A,+,3,*,C,-,5} N: {id,exp,num} exp + exp exp - exp A 3 C 5 S: {prop} id num id num
rbol aritmtico
forma gramatical
parser
Compiladores e Interpretes
EPCI - UNPRG
EJERCICIOS I. Desarrollar el parser para el reconocimiento de las siguientes sentencias de asignacin: a. X = A * B / C / 2 + 3 * (4 + 5 / 2) prop id X exp exp / exp exp * exp id A id B id C / = exp exp num 2 num 3 exp + exp exp * exp num 4 exp + exp
b. X = 4 + 5 * 3 4 + 1 / 2 / 4 * 6 + (3 * 5) prop id X exp exp exp num 4 + exp num 5 exp * exp num 3 exp num 4 exp num 1 exp / + exp exp / * exp exp num 6 = exp exp + exp exp num 3 * exp num 5
Compiladores e Interpretes
EPCI - UNPRG
c. X = ((A + 3) + 5 * 4 + (6 / 3 * 4)) / 2 + 4 * 3 prop id X exp exp exp exp id A + exp num 3 + exp exp num 5 * exp exp + exp exp / * exp / = exp exp num 2 exp + exp exp num 4 * exp num 3
num num 4 6
d. X = (A + (3 * 5 + (6 * 4 / 3 / 2)) + 4 5 * 4) / 5 / 2 prop id X exp exp exp exp id A + exp exp * exp num 3 num 5 exp + exp exp / exp / exp + exp num 4 exp num 2 = exp / exp exp * exp num 5 num 4 exp / exp num 5 exp num 2
Compiladores e Interpretes
EPCI - UNPRG
II. Desarrollar las gramticas para el reconocimiento de: a. Sentencia condicional if()
prop_cond if (exp) then {prop} | if (exp) then {prop} else {prop} dig 0 9 num dig | dig num letra a z | A Z comp letra | dig | _ | ( letra | dig | _ ) comp id letra | letra (comp) op_arit + | - | * | / op_rel < | > | <= | >= | <> exp_arit exp op_arit exp exp_rel exp op_rel exp exp_log exp AND exp | exp OR exp | NOT exp exp id | num | exp_arit | exp_rel | exp_log prop_asig id = exp prop_var id++ | id prop_declar tipo prop_asig | tipo id prop prop_asig | prop_var | prop_declar | prop_cond | (prop_asig | prop_var | prop_declar | prop_cond) prop
Definicin de reglas que sern utilizadas para la constru ccin de la gramtica de las sentencias sig uientes.
prop_rep for (inicia; evalua; var) {prop} inicia prop_asig | prop_declar | (prop_asig | prop_declar), inicia evalua exp_rel | exp_log var prop_var | prop_asig | (prop_var | prop_asig), var prop prop_asig | prop_var | prop_declar | prop_cond | prop_rep | (prop_asig | prop_var | prop_declar | prop_cond | prop_rep) prop
prop_ctrl while (evalua) {prop} | do {prop} while (evalua) prop prop_asig | prop_var | prop_declar | prop_cond | prop_rep | prop_ctrl | (prop_asig | prop_var | prop_declar | prop_cond | prop_rep | prop_ctrl) prop
prop_selec switch (id) {enuncia | defa} enuncia case valores: prop; break; | case valores: prop; break; enuncia valores num | letra | num, valores | letra, valores defa enuncia default: prop; break; prop prop_asig | prop_var | prop_declar | prop_cond | prop_rep | prop_ctrl | prop_selec | (prop_asig | prop_var | prop_declar | prop_cond | prop_rep | prop_ctrl | prop_selec ) prop
prop_esc printf (cuerpo) | printf (cuerpo, var_esc) cuerpo cad | format | (cad | format) cuerpo cad letra | dig | car_esp | delim | (letra | dig | car_esp | delim) cad format %d | %f | %c | %s car_esp ! | | | ? | < | > | | #| $ | % | & | @ | / | ) | ( | ; | : | , | . | ... delim eb | TAB | space var_esc id | exp_arit | ( id | exp_arit ), var_esc prop prop_asig | prop_var | prop_declar | prop_cond | prop_rep | prop_ctrl | prop_selec | prop_esc | (prop_asig | prop_var | prop_declar | prop_cond | prop_rep | prop_ctrl | prop_selec | prop_esc) prop
prop_lect scanf (format, var_lect) var_lect id | &id | (id | &id) var_lect prop prop_asig | prop_var | prop_declar | prop_cond | prop_rep | prop_ctrl | prop_selec | prop_esc | prop_lect | (prop_asig | prop_var | prop_declar | prop_cond | prop_rep | prop_ctrl | prop_selec | prop_esc | prop_lect ) prop