Está en la página 1de 24

PROGRAMACION DE SISTEMAS

Unidad VI

2 0

PROGRAMACION DE SISTEMAS INDICE UNIDAD VI GENERACIN DE CDIGO INTERMEDIO

Unidad VI

Pg.

6.1 LENGUAJES INTERMEDIOS.. 6.2 NOTACIONES LENGUAJES INTERMEDIOS. 6.2.1 INFIJA 6.2.2 CODIGO P DE... 6.2.3 CUDRUPLOS

5 6 7 11 16

6.3 ES UEMAS DE GENERACIN 6.3.1 E"PRESIONES LENGUAJES INTERMEDIOS 6.3.2 DECLARACIN VARIA#LES CONSTANTES LENGUAJES INTERMEDIOS...

1! 21 21

6.3.3 ESTATUTO ASIGNACIN. 21

6.3.$ ESTATUTO CONDICIONAL. 6.3.5 ESTATUTO CICLOS. 6.3.7 FUNCIONES LENGUAJES INTERMEDIOS

21 22 22

2 0

PROGRAMACION DE SISTEMAS G%&%'()*+& D% C+,*g- I&.%'/%,*-

Unidad VI

Esta fase del compilador no es en realidad una parte separada del compilador, la mayora de los compiladores generan cdigo como parte del proceso de anlisis sintctico, esto es debido a que requieren del rbol de sintaxis y si este no va a ser construido fsicamente, entonces deber acompaar al analizador sintctico al barrer el rbol implcito. En lugar de generar cdigo ensamblador directamente, los compiladores generan un cdigo intermedio que es ms parecido al cdigo ensamblador, las operaciones por ejemplo nunca se acen con ms de dos operandos. !l no generarse cdigo ensamblador el cual es dependiente de la computadora especifica, sino cdigo intermedio, se puede reutilizar la parte del compilador que genera cdigo intermedio en otro compilador para una computadora con diferente procesador cambiando solamente el generador de cdigo ensamblador al cual llamamos bac"#end, la desventaja obviamente es la lentitud que esto conlleva. $a tarea de sntesis suele comenzar generando un cdigo intermedio. El cdigo intermedio no es el lenguaje de programacin de ninguna mquina real, sino que corresponde a una mquina abstracta, que se debe de definir lo ms general posible, de forma que sea posible traducir este cdigo intermedio a cualquier mquina real. El objetivo del cdigo intermedio es reducir el n%mero de programas necesarios para construir traductores, y permitir ms fcilmente la transportabilidad de unas mquinas a otras. &upngase que se tienen n lenguajes, y se desea construir traductores entre ellos. &era necesario construir n'(n#)* traductores. +espu,s de los anlisis sintctico y semntico, algunos compiladores generan una representacin intermedia explcita del programa fuente. &e puede considerar esta representacin intermedia como un programa para una mquina abstracta. Esta representacin intermedia debe tener dos propiedades importantes- debe ser fcil de producir y fcil de traducir al programa objeto. $a representacin intermedia puede tener diversas formas. Existe una forma intermedia llamada .cdigo de tres direcciones/ que es como el lenguaje ensamblador de una mquina en la que cada posicin de memoria puede actuar como un registro. El cdigo de tres direcciones consiste en una secuencia de instrucciones, cada una de las cuales tiene como mximo tres operandos. Esta representacin intermedia tiene varias propiedades0 1rimera.# 2ada instruccin de tres direcciones tiene a lo sumo un operador, adems de la asignacin, por tanto, cuando se generan estas instrucciones, el traductor tiene que decidir el orden en que deben efectuarse las operaciones.

2 0

PROGRAMACION DE SISTEMAS

Unidad VI

&egunda.# El traductor debe generar un nombre temporal para guardar los valores calculados por cada instruccin. 3ercera.# !lgunas instrucciones de .tres direcciones/ tienen menos de tres operandos, por ejemplo, la asignacin. C+,*g- I&.%'/%,*En el modelo de compilacin anlisis#sintesis, el front#end traduce el programa fuente en una representacin de cdigo intermedio, y el bac"#end traduce esta representacin en cdigo final. 1ermite crear facilmente un compilador para diferentes maquinas $a representacin intermedia puede ser optimizada por un optimizador independiente del cdigo final $enguajes 4ntermedios0 !rboles de &intaxis 2digo de tres direcciones

C+,*g- ,% .'%0 ,*'%))*-&%0 &e compone de instrucciones que contienen tres (o menos* direcciones, dos para los operandos y una para el resultado $os operandos y el resultado pueden ser nombres, o variables temporales generadas por el compilador. $os operandos pueden tambi,n ser constantes. $as instrucciones pueden estar marcadas por etiquetas simblicas (representan un ndice dentro del conjunto de instrucciones* 3iene instrucciones de control de flujo.

2 0

PROGRAMACION DE SISTEMAS 6.1 L%&g1(2%0 I&.%'/%,*-0 $enguaje 4ntermedio. 3ipo ()*

Unidad VI

Es una representacin ms abstracta y uniforme que un lenguaje mquina concreto. &u misin es descomponer las expresiones complejas en binarias y las sentencias complejas en sentencias simples. 5entajas0 6 1ermite una fase de anlisis (anlisis semntico* independiente de la mquina. 6 &e pueden realizar optimizaciones sobre el cdigo intermedio ($as complejas rutinas de optimizacin son independientes de la mquina*. +esventajas0 6 1,rdida de eficiencia (no permite una compilacin de una sola pasada*. 6 4ntroduce en el compilador una nueva fase de traduccin. $enguaje 4ntermedio. 3ipo (7* 3ipos de lenguajes intermedios0 6 8rbol sintctico. 6 8rbol sintctico abstracto. 3odos los nodos del rbol representan smbolos terminales. $os nodos ijos son operandos y los nodos internos son operadores. 6 9rafo dirigido acclico (9+!*. 6 :otacin posfija. 6 +efinicin de una mquina abstracta. 6 :#tupla0 2ada sentencia del lenguaje intermedio consta de : elementos0 (;perador, ;perando), ;perando7,<, ;perando :=>)* $os ms usuales son los tercetos (tripletas* y los cuartetos (cudruplas*, llamados tambi,n cdigo de tres direcciones.

$enguaje 4ntermedio. 3ipo (?* 3ripletas0 Ejemplo0 d @ a A b ' c B)C (', b, c* B7C (A, a, B)C* B?C (@, d, B7C* DoperadorE, DoperandoF)E, DoperandoF7E 2uartetos0 Ejemplo0 d @ a A b ' c (', b, c, temp)* (A, a, temp), temp7* (@, temp7, G, d*.

2 0

PROGRAMACION DE SISTEMAS 6.2 N-.()*-&%0 L%&g1(2%0 I&.%'/%,*-0

Unidad VI

$a diversidad de notaciones corresponde en que para algunos casos es ms sencillo un tipo de notacin. $as notaciones tambi,n dependen de cmo se recorrer el rbol sintctico, el cual puede ser en inorden, preorden o postorden- teniendo una relacin de uno a uno con la notacin de los operadores. Existen bsicamente dos formas de describir cmo en una cierta gramtica una cadena puede ser derivada desde el smbolo inicial. $a forma ms simple es listar las cadenas de smbolos consecutivas, comenzando por el smbolo inicial y finalizando con la cadena y las reglas que an sido aplicadas. &i introducimos estrategias como reemplazar siempre el no terminal de ms a la izquierda primero, entonces la lista de reglas aplicadas es suficiente. ! esto se le llama derivacin por la izquierda. 1or ejemplo, si tomamos la siguiente gramtica0 ()* & H & A & (7* & H ) I la cadena J) A ) A )J, su derivacin a la izquierda est en la lista B()* ()* (7* (7* (7*C. !nlogamente, la derivacin por la derec a se define como la lista que obtenemos si siempre reemplazamos primero el no terminal de ms a la derec a. En ese caso, la lista de reglas aplicadas para la derivacin de la cadena con la gramtica anterior sera la B()* (7* ()* (7* (7*C. $a distincin entre derivacin por la izquierda y por la derec a es importante porque en la mayora de analizadores, la transformacin de la entrada es definida dando una parte de cdigo para cada produccin que es ejecutada cuando la regla es aplicada. +e modo que es importante saber qu, derivacin aplica el analizador, porque determina el orden en el que el cdigo ser ejecutado. Kna derivacin tambi,n puede ser expresada mediante una estructura jerrquica sobre la cadena que est siendo derivada. 1or ejemplo, la estructura de la derivacin a la izquierda de la cadena J) A ) A )J con la gramtica anterior sera0 &H&A& ()* &H&A&A& ()* &H)A&A& (7* &H)A)A& (7* 2 0

PROGRAMACION DE SISTEMAS &H)A)A) (7* LLL)M & A L)M &M & A L)M &M & $as notaciones sirven de base para expresar sentencias bien definidas.

Unidad VI

El uso ms extendido de las notaciones sirve para expresar operaciones aritm,ticas. $as expresiones aritm,ticas se pueden expresar de tres formas distintas0 infija, prefija y postfija.

6.2.1 I&3*2( L%&g1(2%0 I&.%'/%,*-0 $a notacin infija es la ms utilizada por los umanos por que es la ms comprensible ya que ponen el operador entre los dos operadnos. 1or ejemplo aAb#N. :o existe una estructura simple para representar este tipo de notacin en la computadora por esta razn se utilizan otras notaciones. 1ostfija $enguajes 4ntermedios $a notacin postfija pone el operador al final de los dos operandos, por lo que la expresin queda0 abAN# 6 $a notacin postfija utiliza una estructura del tipo $4O; ($ast 4n Oirst ;ut* pila, la cual es la ms utilizada para la implementacin. 1refija $enguajes 4ntermedios $a notacin prefija pone el operador primero que los dos operandos, por lo que la expresin anterior queda0 Aab#N. Esto se representa con una estructura del tipo O4O; (Oirst 4n Oirst ;ut* o cola. $as estructuras O4O; son ampliamente utilizadas pero tienen problemas con el anidamiento aritm,tico.

2 0

PROGRAMACION DE SISTEMAS Existen maneras formales para representar cdigo intermedio.

Unidad VI

Estas notaciones simplifican la traduccin de nuestro cdigo fuente a nuestro cdigo objeto ya que a orran y acotan smbolos de la tabla de smbolos $a representacin intermedia puede tener diversas formas. Existe una forma intermedia llamada Jcdigo de tres direccionesJ, que es como el lenguaje ensamblador para una mquina en la que cada posicin de memoria puede actuar como un registro. El cdigo de tres direcciones consiste en una secuencia de instrucciones, cada una de las cuales tiene como mximo tres operandos. El programa fuente de ()* puede aparecer en cdigo de tres direcciones como0

Esta representacin intermedia tiene varias propiedades. 1rimera, cada instruccin de tres direcciones tiene a lo sumo un operador, adems de la asignacin. 1or tanto, cuando se generan esas instrucciones el compilador tiene que decidir el orden en que deben efectuarse, las operaciones- la multiplicacin precede a la adicin al programa fuente de. &egunda, el compilador debe generar un nombre temporal para guardar los valores calculados por cada instruccin. 3ercera, algunas instrucciones de Jtres direccionesJ tienen menos de tres operadores, por ejemplo la primera y la %ltima instrucciones de.

$a fase de optimizacin de cdigo trata de mejorar el cdigo intermedio de modo que resulte un cdigo de mquina ms rpido de ejecutar. !lgunas optimizaciones son triviales. 1or ejemplo, un algoritmo natural genera el cdigo intermedio (7* utilizando una instruccin para cada operador de la representacin del rbol despu,s del anlisis semntico, aunque ay una forma mejor de realizar los mismos clculos usando las dos instrucciones0

2 0

PROGRAMACION DE SISTEMAS

Unidad VI

$a notacin polaca, tambi,n conocida como notacin de prefijo o notacin prefija, es una forma de notacin para la lgica, la aritm,tica, y el lgebra. &u caracterstica distintiva es que coloca los operadores a la izquierda de sus operandos. &i la aridad de los operadores es fija, el resultado es una sintaxis que carece de par,ntesis u otros signos de agrupacin, y todava puede ser analizada sin ambigPedad. El lgico polaco Qan Ru"asieSicz invent esta notacin alrededor de )T7U para simplificar la lgica proposicional. $a notacin de prefijo a visto una amplia aplicacin con las &#expresiones de $isp, donde son requeridos los par,ntesis debido a los operadores aritm,ticos que tienen aridad variable. El lenguaje de programacin !mbi usa la notacin polaca para operaciones aritm,ticas y la construccin del programa. $a posfija notacin polaca inversa es usada en muc os lenguajes de programacin basados en pila como 1ost&cript, y es el principio de operacin de ciertas calculadoras, notablemente las de VeSlett#1ac"ard.

!unque sea obvio, es importante observar que el n%mero de operandos en una expresin debe igualar al n%mero de operadores ms uno, de lo contrario la sentencia no tiene ning%n sentido (asumiendo que solamente son usados operadores binarios en la expresin*. Esto puede ser fcil de pasarlo por alto cuando se trata con expresiones ms largas y ms complicadas con varios operadores, as que se debe tener cuidado de comprobar con minuciosidad que una expresin tiene sentido al usar la notacin de prefijo. !ritm,tica $a expresin para sumar los n%meros uno y dos, en la notacin de prefijo, se escribe JA ) 7J en vez de J) A 7J. En expresiones ms complejas, los operadores todava preceden sus operandos, pero los operandos pueden ser ellos mismos expresiones no triviales incluyendo sus propios operadores. 1or ejemplo, la expresin que sera escrita en la notacin de infijo convencional como (N # W* ' X 1uede ser escrito en prefijo como ' (# N W* X ; simplemente '#NWX 1uesto que los simples operadores aritm,ticos son todos binarios (por lo menos, en contextos aritm,ticos*, cualquier representacin prefijo de ellos es inequvoca, y poner 2 0

PROGRAMACION DE SISTEMAS

Unidad VI

signos de agrupamiento a la expresin de prefijo es innecesario. En el ejemplo anterior, los par,ntesis en la versin de infijo eran requeridos. &i los movemos0 N # (W ' X* ; simplemente los quitamos0 N#W'X 2ambiara el significado y el resultado de toda la expresin. &in embargo, la versin correspondiente de prefijo de este segundo clculo sera escrita como0 #N'WX El proceso de la substraccin es diferido asta que ambos operandos de la substraccin se ayan ledo (es decir, N y el producto de W y X*. 2omo con cualquier notacin, las expresiones ms interiores son evaluadas primero, pero en la notacin de prefijo este JinterioridadJ se puede transportar por el orden en vez del agrupamiento. $a notacin polaca es la originada por un !utmata con pila, en la que los operadores siempre preceden a los operandos sobre los que act%an, y que tiene la ventaja de no necesitar par,ntesis0 E0.&,(' Ejemplo )0 7 ' (? A N* Ejemplo 70 7 ' ? A N P-4()( Ejemplo )0 ' 7 A ? N Ejemplo 70 A ' 7 ? N

2 0

PROGRAMACION DE SISTEMAS 6.2.2 C+,*g- P 2digo 1 o 1rolog

Unidad VI

1rolog, proveniente del franc,s 1rogramation et $ogique, es un lenguaje de programacin lgico e interpretado, bastante popular en el medio de investigacin en 4nteligencia !rtificial.

&e trata de un lenguaje de programacin ideado a principios de los aos XU en la universidad de !ix#Yarseille por los profesores !lain 2olmerauer y 1 illipe Zoussel. 4nicialmente se trataba de un lenguaje totalmente interpretado asta que, a mediados de los XU, +avid V.+. [arren desarroll un compilador capaz de traducir 1rolog en un conjunto de instrucciones de una mquina abstracta denominada [arren !bstract Yac ine, o abreviadamente, [!Y. +esde entonces 1rolog es un lenguaje semi#interpretado.

1rolog se enmarca en el paradigma de los lenguajes lgicos, lo que lo diferencia enormemente de otros lenguajes ms populares tales como Oortran, 1ascal, 2, etc.

En todos los mencionados, las instrucciones se ejecutan normalmente en orden secuencial, es decir, una a continuacin de otra, en el mismo orden en que estn escritas, que slo vara cuando se alcanza una instruccin de control (un bucle, una instruccin condicional o una transferencia*.

$os programas en 1rolog se componen de clusulas de Vorn que constituyen reglas del tipo .modus ponendo ponens/, es decir, .&i es verdad el antecedente, entonces es verdad el consecuente/. :o obstante, la forma de escribir las clusulas de Vorn es al contrario de lo abitual. 1rimero se escribe el consecuente y luego el antecedente. El antecedente puede ser una conjuncin de condiciones que se denomina secuencia de objetivos. 2ada objetivo se separa con una coma y puede considerarse similar a una instruccin o llamada a procedimiento de los lenguajes imperativos. En 1rolog no existen instrucciones de control. &u ejecucin se basa en dos conceptos0 la unificacin y el bac"trac"ing. 9racias a la unificacin, cada objetivo determina un subconjunto de clusulas susceptibles de ser ejecutadas. 2ada una de ellas se denomina punto de eleccin. 1rolog selecciona el primer punto de eleccin y sigue ejecutando el programa asta determinar si el objetivo es verdadero o falso. En caso de ser falso entra en juego el \bac"trac"ing], que consiste en des acer todo lo ejecutado situando el programa en el mismo estado en el que estaba justo 2 0

PROGRAMACION DE SISTEMAS

Unidad VI

antes de llegar al punto de eleccin. Entonces se toma el siguiente punto de eleccin que estaba pendiente y se repite de nuevo el proceso. 3odos los objetivos terminan su ejecucin bien en .verdadero/, bien en .falso/.

$as listas son colecciones de elementos en 1rolog. Kna lista se divide en dos partes0 2abeza. Es el primer elemento de la lista. 2ola. Es una lista con el resto de los elementos de la lista. $a cabeza y la cola de una lista se separan con el smbolo .^/.

Ejemplo de 2digo 1rolog +eclaraciones 1adre de(\juan], \maria]*. _ juan es padre de maria 1adre de(\pablo], \juan]*. _ pablo es padre de juan 1adre de(\pablo], \marcela]*. 1adre de(\carlos], \debora]*. _ ! es ijo de ` si ` es padre de ! Vijo de(!,`* 0# padrede(`,!*. _ ! es abuelo de ` si ! es padre de 2 y 2 es padre ` !buelo de(!,`* 0# 1adre de(!,2*, 1adre de(2,`*. _ ! y ` son ermanos si el padre de ! es tambi,n el padre de ` y si ! y ` no son lo mismo Vermano de(!,`* 0# 2 0

PROGRAMACION DE SISTEMAS 1adre de(2,!* , 1adre de(2,`*, ! a@@ `. _ ! y ` son familiares si ! es padre de ` o ! es ijo de ` o ! es ermano de ` Oamiliar de(!,`* 0# 1adre de(!,`*. Oamiliar de(!,`* 0# Vijo de(!,`*. Oamiliar de(!,`* 0# Vermano de(!,`*. 2onsultas _ juan es ermano de marcela= =# ermano de(\juan], \marcela]*. yes _ carlos es ermano de juan= =# ermanode(\carlos], \juan]*. no _ pablo es abuelo de maria= =# abuelo de(\pablo], \maria]*. yes

Unidad VI

2 0

PROGRAMACION DE SISTEMAS _ maria es abuelo de pablo= =# abuelo de(\maria], \pablo]*. :o E2%/54- 0-6'% L*0.(0 P'-4-g _ &i queremos allar la longitud de una lista. _ $a longitud de una lista vacia es U. _ $a longitud de cualquier lista es la longitud de la cola A ). $ongitud (BC,U*. $ongitud (BV^3C,:*0#longitud(3,:U*, : is :U A ). =# longitud (Ba,b,cC,$*. ? =# longitud (Ba,b,cC,b*. :o _ &i queremos determinar si un elemento es pertenece a una lista. _ El elemento pertenece a la lista si coincide con la cabeza de la lista. _ El elemento pertenece a la lista si es se encuentra en la cola de la lista. 1ertenece (c,Bc^FC*. 1ertenece (c,BF^ZC*0# pertenece(c,Z*. =# pertenece(b,Ba,b,cC*. Ies =# pertenece(b,Ba,Bb,cCC*. :o

Unidad VI

2 0

PROGRAMACION DE SISTEMAS =# pertenece(Bb,cC,Ba,Bb,cCC*. Ies _ &i queremos eliminar un elemento de la lista. _ &i c es la cabeza de la lista, la cola 3 es la lista sin c _ &i c no es la cabeza de la lista, conservamos la cabeza de la lista _ como parte de la respuesta y continuamos eliminando c de la cola 3. Elimina (c,Bc^3C,3*. Elimina (c,BV^3C,BV^3)C*0# elimina (c,3,3)*. =# elimina(),B),7,?,bC,Z*. Z @ B7,?,bC =# elimina(),Z,B7,?C*. Z @ B), 7, ?C Z @ B7, ), ?C Z @ B7, ?, )C _ &i queremos calcular la inversa de una lista. _ $a inversa de una lista vacia es una lista vacia. _ $a inversa de V^3 es la inversa de 3 concatenada con V. 4nversa (BC,BC*. 4nversa (BV^3C,$*0# inversa(3,Z*, concatenar(Z,BVC,$*. =# inversa(Ba,b,c,dC,Bd,c,b,aC* Ies

Unidad VI

2 0

PROGRAMACION DE SISTEMAS 6.2.3 C1,'154-0 L%&g1(2%0 I&.%'/%,*-0 Es una estructura tipo registro con cuatros resultado. ;1 tiene un cdigo intermedio.

Unidad VI

campos que se llaman0 op, arg), arg7 y

$os operadores unarios como x0@#y no utilizan arg7. 9eneralmente arg), arg7 y resultado son valores de tipo puntero y apuntan a una entrada en la tabla de smbolos. Esquemas degeneracin $os esquemas de generacin son las estrategias o acciones que se debern realizarse y tomarse en cuenta en el momento de generar cdigo intermedio. $os esquemas de generacin dependen de cada lenguaje. 3omaremos algunos esquemas degeneracin del lenguaje 2. Expresiones 1ara generar expresiones estas deben representarse de manera ms simple y ms literal para que su conversin sea ms rpida. 1or ejemplo la traduccin de operaciones aritm,ticas debe especificarse una por una, de tal forma que una expresin sea lo ms mnimo posible. +eclaracin de variables, constantes. $as declaraciones de variables y constantes deben separarse de tal manera que queden las expresiones una por una de manera simple. 1or ejemplo int a,b,c- se descompone a int a-int b- intc- respectivamente. Estatuto de asignacin $as operaciones de asignacin deben quedar expresadas por una expresin sencilla, si est es compleja se debe reducir asta quedar un operador sencillo. 1or ejemplo0 x @ aAbdN- debe quedar de la forma y @ bdN- z @ aAy- x@z. Estatuto condicional $as condiciones deben expresarse de manera lo ms sencilla posible de tal forma que puedan evaluarse en cortocircuito. 1or ejemplo una instruccin como0 if (a @@ b ee ff@N eef_?@@U* se eval%a primero x @ (a@@b ee ff@N* y @ x ee f_?@@U- if (y* $as instrucciones de decisin compleja como sSitc se reducen a una versin complejas de ifs. 3riplos $enguajes 4ntermedios 2 0

PROGRAMACION DE SISTEMAS

Unidad VI

$as proposiciones de tres direcciones se parece muc o al ensamblador, el cual es un lenguaje intermedio ms entendible para la mquina. $as estructuras de control (if, sSitc , S ile, do#S ile, for* son realmente etiquetas gota disfrazadas. El problema de utilizar cudruplos radica en que se tienen que colocar los valores temporales en la tabla de smbolo. 2on una estructura de tres campos se pueden omitir los valores temporales, dic a estructura recibe el nombre de triples y tiene los siguientes campos0 op, arg) y arg7. 9eneralmente el cdigo que generan los triples recibe el nombre de cdigo de dos direcciones, aunque en ocasiones puede variar. 2uando se utilizan triples se ocupan punteros a la misma estructura de los triples. ' b t) t7 ddcudruplos ' b (U* ddtriple &e debe tener en cuenta el proceso de asignacin, de declaracin, expresiones booleanas. $as expresiones lgicas tambi,n pueden pasarse a cdigo de tres direcciones, utilizando para ello expresiones en corto circuito. $a evaluacin de expresiones en corto circuito implica que se eval%an condiciones revisando valores anteriores- por ejemplo, para el operador !:+ con una condicin que se detecte como falsa toda la expresin es falsa, en el caso del operador ;Z si se encuentra una condicin verdadera todo ser verdadera. $a notacin de tres direcciones es una forma abstracta de cdigo intermedio. Esta notacin se puede implementar como registros con campos para el operador y operadores.

2 0

PROGRAMACION DE SISTEMAS 6.3 E071%/(0 D% G%&%'()*+& L%&g1(2%0 I&.%'/%,*-0

Unidad VI

2uando una empresa desarrolla un compilador para un lenguaje fuente y un lenguaje objeto determinados, normalmente no es el %nico compilador que la empresa piensa desarrollar- es ms muc os fabricantes de microprocesadores tienen una divisin de dedicada a desarrollar compiladores para los nuevos c ips que construya. 2uando el n%mero de lenguaje fuente crece asta un n%mero grande Y, ydo cuando el n%mero de lenguajes objeto tambi,n crece asta un n%mero grande :, es necesario encontrar una t,cnica para evitar tener que disear Y x : compiladores. $a solucin consiste en utilizar un lenguaje intermedio o una representacin intermedia- de esta forma slo ay que construir Y programas que traduzcan de cada lenguaje fuente al lenguaje intermedio (los front ende*, y : programas que traduzcan del lenguaje intermedio a cada lenguaje objeto (los bac" end*. $a matemtica (del lat. mat ematgca, y este del gr. h ijklijhmno, derivado de ioklij, conocimiento* es una ciencia formal que estudia las propiedades y las relaciones que se pueden establecer entre los entes abstractos, como los smbolos, los n%meros y las figuras geom,tricas.B)C

!unque la matemtica sea la supuesta .Zeina de las 2iencias/, algunos matemticos no la consideran una ciencia natural. 1rincipalmente, los matemticos definen e investigan estructuras y conceptos abstractos por razones puramente internas a la matemtica, debido a que tales estructuras pueden proveer, por ejemplo, una generalizacin elegante, o una erramienta %til para clculos frecuentes. !dems, muc os matemticos consideran la matemtica como una forma de arte en vez de una ciencia prctica o aplicada. &in embargo, las estructuras que los matemticos investigan frecuentemente s tienen su origen en las ciencias naturales, y muc as veces encuentran sus aplicaciones en ellas, particularmente en la fsica. :o existe un %nico lenguaje intermedio en todos los compiladores, sino que cada empresa que disea compiladores suele tener su propio lenguaje intermedio. $a utilizacin de un lenguaje intermedio permite construir en, muc o menos tiempo un compilador para otra mquina y tambi,n permite construir compiladores para otros lenguajes fuente generando cdigos para la misma mquina. $a matemtica es un arte, pero tambi,n una ciencia de estudio. 4nformalmente, se puede decir que es el estudio de los .n%meros y smbolos/. Es decir, es la investigacin de estructuras abstractas definidas a partir de axiomas, utilizando la lgica y la notacin matemtica. Es tambi,n la ciencia de las relaciones espaciales y cuantitativas. &e trata de relaciones exactas que existen entre cantidades y magnitudes, y de los m,todos por los cuales, de acuerdo con estas relaciones, las cantidades buscadas son deducibles a partir de otras cantidades conocidas o presupuestas. 2 0

PROGRAMACION DE SISTEMAS

Unidad VI

5,ase tambi,n0 Oilosofa de la matemtica :o es infrecuente encontrar a quien describe la matemtica como una simple extensin de los lenguajes naturales umanos, que utiliza una gramtica y un vocabulario definidos con extrema precisin, cuyo propsito es la descripcin y exploracin de relaciones conceptuales y fsicas. Zecientemente, sin embargo, los avances en el estudio del lenguaje umano apuntan en una direccin diferente0 los lenguajes naturales (como el espaol y el franc,s* y los lenguajes formales (como la matemtica y los lenguajes de programacin* son estructuras de naturaleza bsicamente diferente. 1or ejemplo, el compilador de 2 de 9:K que se distribuye con $inux es una versin de una familia de compiladores de 2 para diferentes mquinas o sistemas operativos0 !lp a, !4c, &un, V1, Y&#+;&, etc.. !dems, 9:K a desarrollado un compilador de O;Z3Z!: y otro de 1ascal que, al utilizar el mismo lenguaje intermedio, pueden ser portados a todos los sistemas y mquinas en las que y a existe un compilador de 2 de 9:K con relativamente poco esfuerzo. $a generacin de cdigo intermedio transforma un rbol de anlisis sintctico (semntico* en una representacin en un lenguaje intermedio, que suele ser cdigo suficientemente sencillo para poder luego generar cdigo mquina. Kna forma de acer esto es mediante el llamado cdigo de tres direcciones. Kna sentencia en cdigo de tres direcciones es0 ! 0@ ` op 2, donde !, ` y 2 son operandos y op es un operador binario. 3ambi,n permite condiciones simples y saltos. 1or ejemplo, para la siguiente sentencia0

APLICACIONES

2 0

PROGRAMACION DE SISTEMAS

Unidad VI

$a importancia practica de lenguaje en la informtica se manifiesta principalmente en el uso cotidiano que ace el profesional informtico de compiladores e int,rpretes, consustancial al la gestin y programacin de los sistemas informticos. !s pues, un conocimiento acerca del funcionamiento interno de estas erramientas bsicas resulta fundamental. 1ero los conocimientos adquiridos en su estudio encuentren aplicacin fuera del campo de la compilacin. Es probable que ocas personas realice o mantenga un compilador para un lenguaje de programacin, pero muc a gente puede obtener provec o del uso de un gran n%mero de sus t,cnicas para el diseo de softSare en general. En efecto, entre los campos de la informtica en los que encuentra aplicacin las t,cnicas aprendidas en 2;Y14$!+;ZE& e 4:3pZ1ZE3E& se puede citar lo siguiente0 3ratamiento de fic eros de texto con informacin estructurada. $enguaje como 1erl y 3E$, o comandos como el sed o egrep de K:4c, incorpora tratamiento de expresiones regulares para la deteccin ydo modificacin de patrones sin texto. 1rocesadores de texto. 1rocesadores como vi o Emacs incorporan tambi,n la posibilidad de efectuar b%squedas y sustituciones mediante expresiones regulares. Existen tambi,n procesadores (entre ellos los Emacs* capaces de analizar y tratar fic eros de texto de organizacin compleja. +iseo e interpretacin de lenguaje para formateo y texto y descripcin de grficos. &istema de formateo de texto (como el V3Y$ o el 3Ec* o para la especificacin de tablas (tbl*, ecuaciones (eqn*, grficos (postscript*, etc. requieren sofisticados microprocesadores. 9estin de base de datos. $as t,cnicas que estamos considerando pueden explotarse tanto en la exploracin y proceso de fic eros de informacin como en la realizacin de la interface de usuario. 3raduccin de formato de fic ero. 2alculo simblico. Zeconocimiento de formas. $as t,cnicas de anlisis sintctico son ampliamente utilizadas en la deteccin de patrones en texto, el reconocimiento automtico del abla o la visin por computador.

2 0

PROGRAMACION DE SISTEMAS 6.3.1 E85'%0*-&%0 L%&g1(2%0 I&.%'/%,*-0

Unidad VI

1ara generar expresiones estas deben representarse de manera ms simple y ms literal para que su conversin sea ms rpida. 1or ejemplo la traduccin de operaciones aritm,ticas debe especificarse una por una, de tal forma que una expresin sea lo ms mnimo posible.

6.3.2 D%)4('()*+& V('*(64%0 C-&0.(&.%0 L%&g1(2%0 I&.%'/%,*-0 $as declaraciones de variables y constantes deben separarse de tal manera que queden las expresiones una por una de manera simple. 1or ejemplo int a,b,c- se descompone a int a- int b- intc- respectivamente. +eclaracin 5ariables 2onstantes $enguajes 4ntermedios $as operaciones de asignacin deben quedar expresadas por una expresin sencilla, si est es compleja se debe reducir asta quedar un operador sencillo. 1or ejemplo0 x @ aAbdN- debe quedar de la forma y @ bdN- z @ aAy- x@z.

6.3.3 E0.(.1.- A0*g&()*+& L%&g1(2%0 I&.%'/%,*-0 $as operaciones de asignacin deben quedar expresadas por una expresin sencilla, si est es compleja se debe reducir asta quedar un operador sencillo. 1or ejemplo0 x @ aAbdN- debe quedar de la forma y @ bdN- z @ aAy- x@z.

6.3.$ E0.(.1.- C-&,*)*-&(4 L%&g1(2%0 I&.%'/%,*-0 $as condiciones deben expresarse de manera lo ms sencilla posible de tal forma que puedan evaluarse en cortocircuito. 1or ejemplo una instruccin como0 if (a @@ b ee ff@N ee f_?@@U* se eval%a primero x @ (a@@b ee ff@N* y @ x ee f_?@@U- if (y* $as instrucciones de decisin compleja como sSitc se reducen a una versin complejas de if].

6.3.5 E0.(.1.- C*)4-0 L%&g1(2%0 I&.%'/%,*-0 2 0

PROGRAMACION DE SISTEMAS

Unidad VI

$os ciclos se descomponen en un ciclo gen,rico, por lo que ciclos S ile, for y doS ile tienen la misma representacin interna. En el caso de 2, todo queda en forma de S ile. $as condiciones lgicas tambi,n pueden ser evaluadas en cortocircuito y reducidas. !rreglos $enguajes 4ntermedios $os arreglos se descomponen en estructuras bsicas de manejo de manera simple, as por ejemplo0 c ar 'a@.Vola/- se reduce a0 aBUC@\V]- aB)C@\o]- aB7C@\l]- aB?C@\a]- aBbC@\aU].

6.3.6 F1&)*-&%0 L%&g1(2%0 I&.%'/%,*-0 $as funciones pueden reducir a en lnea, lo que se ace es expander el cdigo original de la uncin. $as funciones se descomponen simplificando los parmetros de manera individual al igual que el valor de retorno.
Ouncin del $enguaje, entendemos que es el uso de la lengua que ace un ablante. En simples palabras, las funciones del lenguaje son los diferentes objetivos, propsitos y servicio que se le da al lenguaje al comunicarse, dndose una funcin del lenguaje por cada factor que tiene ,ste, en donde la funcin que prevalece es el factor en donde ms se pone ,nfasis al comunicarse. +iversos lingPistas (qarl `P ler, Zoman Qa"obson, Yic ael Valliday<* an propuesto distintas clasificaciones de las funciones del lenguaje0 `P ler propuso que existan %nicamente tres funciones0 6 $a Zepresentativa (por la cual se trasmiten informaciones objetivamente* 6 $a Expresiva o emotiva (que expresa sentimientos del emisor* 6 $a 2onativa, mediante la que se influye en el receptor del mensaje a trav,s de rdenes, mandatos o sugerencias< Este modelo pareca muy incompleto a Qa"obson, quien caracteriz mejor las funciones de `P ler y aadi otras tres sobre los ejes de los factores de la comunicacin 0

Ouncin del $enguaje, entendemos que es el uso de la lengua que ace un ablante. En simples palabras, las funciones del lenguaje son los diferentes objetivos, propsitos y servicio que se le da al lenguaje al comunicarse, dndose una funcin del lenguaje por cada factor que tiene ,ste, en donde la funcin que prevalece es el factor en donde ms se pone ,nfasis al comunicarse. +iversos lingPistas (qarl `P ler, Zoman Qa"obson, Yic ael Valliday<* an propuesto distintas clasificaciones de las funciones del lenguaje0 `P ler propuso que existan %nicamente tres funciones06 $a Zepresentativa (por la cual se trasmiten informaciones objetivamente*6 $a Expresiva o emotiva (que expresa sentimientos del emisor*6 $a 2onativa, mediante la que se influye en el receptor del mensaje a trav,s de rdenes, mandatos o sugerencias<Este modelo pareca muy incompleto a Qa"obson, quien caracteriz mejor las funciones de `P ler y aadi otras tres sobre los ejes de los factores de la comunicacin 0 2 0

PROGRAMACION DE SISTEMAS

Unidad VI

Ouncin !pelativa o 2onativa &e centra en el receptor. Es la funcin de mandato y pregunta. &us recursos lingPsticos son los vocativos, oraciones interrogativas, utilizacin deliberada de elementos afectivos, adjetivos valorativos, t,rminos connotativos y toda la serie de recursos retricos. &e da en lenguaje coloquial, es dominante en la publicidad y propaganda poltica e ideolgica en general. Yediante el uso de esta funcin se pretende causar una reaccin en el receptor. Es decir con esta funcin se pretende que aga algo o que deje de acer. 1or ejemplo cuando decimos .cllate/ o .abre la puerta por favor/, etc. El mensaje solicita la atencin del destinatario, es decir apela a ,l, implicita o explicitamente. 3ambi,n se le conoce como funcin apelativa. Ouncion Zeferencial Es la funcin del lenguaje en donde se pone ,nfasis al factor de contexto. !l ser el contexto todo lo extra comunicativo, la funcin referencial trata solamente sucesos reales y comprobables, ya que no son opiniones ni cosas subjetivas, lo que son es una serie de elementos verificables entre otros Est presente en todos los actos comunicativos. &e da cuando el mensaje que se transmite puede ser verificable, porque reconocemos la relacin que se establece entre el mensaje y el objeto (referente* Es aquella que utiliza el lenguaje denotativo (el significado primario de las palabras*. 1revalecen los sustantivos y verboslos textos informativos, cientficos y periodsticos. Vay X funciones0 Expresiva o emotiva, apelativa o conativa, referencial o representativa, situacional, Esta funcin se centra en el contexto e identifica la relacion entre el mensaje y el objeto del que se abla- es decir, se centra en la tercera persona, la lengua se usa para ablar de algo o alguien, que no somos ni t% ni yo. !s, la funcin referencial se ace presente en casi todos los mensajes y sirve para evaluar si ,stos son objetivos o no. $as funciones void dan una forma de emular, lo que en otros lenguajes se conocen como procedimientos (por ejemplo, en 1!&2!$*. &e usan cuando no requiere regresar un valor. &e muestra un ejemplo que imprime los cuadrados de ciertos n%meros.
void cuadrados(* L int contadorfor( contador@)- contadorD)U- contadorAA* printf(J_danJ,contador'contador*M main(*L cuadrados(*M

En la funcin cuadrados no esta definido ning%n parmetro, y por otra parte tampoco se emplea la sentencia return para regresar de la funcin. 2 0

PROGRAMACION DE SISTEMAS Ounciones y arreglos

Unidad VI

2uando se usan un arreglo como un argumento a la funcin, se pasa slo la direccin del arreglo y no la copia del arreglo entero. 1ara fines prcticos podemos considerar el nombre del arreglo sin ning%n ndice como la direccin del arreglo. 2onsiderar el siguiente ejemplo en donde se pasa un arreglo a la funcin impFrev, observar que no es necesario especificar la dimensin del arreglo cuando es un parmetro de la funcin.
void impFrev(c ar sBC* L int tfor( t@strlen(s*#)- tE@U- t##* printf(J_cJ,sBtC*M main(* L c ar nombreBC@JOacultadJimpFrev(nombre*M

;bservar que en la funcin impFrev se usa la funcin strlen para calcular la longitud de la cadena sin incluir el terminador nulo. 1or otra parte, la funcin impFrev no usa la sentencia return ni para terminar de usar la funcin, ni para regresar alg%n valor. &e muestra otro ejemplo,
float enconprom(int tam, float listaBC* L int ifloat suma @ U.Ufor ( i@U- iDtam- iAA* suma A@ listaBiCreturn(sumadtam*M main(* L float numerosBC@L7.?, r.U, )N.U, 7U.7, bb.U), #?.U, #7.TMprintf(JEl promedio de la lista es _fanJ, enconprom(X,numeros* *M

2 0

También podría gustarte