Está en la página 1de 11

U

N I V E R S I D A D

SANTIAGO

NACIONAL

ANTUNEZDE

MAYOLO

FACULTAD DE CIENCIAS
INGENIERIADESISTEMAS E INFORMATICA
NOMBRE DE LA ASIGNATURA:
TEORIA DE LENGUAJES
TRABAJO:
EXPOSITIVO
******************************
ALUMNO
GARAY ASENCIOS EDWARD RONALD
PEREZ MACEDO EDWIN
LOPEZ DOLORES JHONY

******************************

INTRODUCCION
Este documento trata las representaciones intermedias; el cdigo
intermedio es un cdigo abstracto independiente de la mquina
para la que se generar el cdigo objeto, este cdigo ha de cumplir
dos requisitos importantes:
Ser fcil de producir a partir del anlisis sintctico.
Ser fcil traducir al lenguaje objeto.
Hay muchos tipos y formas de cdigos intermedios; como por
ejemplo el rbol sintctico, notacin posfija y cdigo de tres
direcciones.
Algunas ventajas de utilizar la forma intermedia son aumentar la
portabilidad del compilador de una maquina a otra:
Se puede utilizar el mismo analizador lxico para diferentes
generadores.
Se pueden utilizar optimizadores independientes de la
mquina.
Facilitar la divisin en fases del proyecto.

1. LENGUAJES INTERMEDIOS

Un lenguaje intermedio es el lenguaje de una mquina abstracta


diseada para ayudar en el anlisis de los programas de
computadora. El trmino viene de su uso en los compiladores,
donde un compilador primero traduce el cdigo fuente de un
programa,
en
una
forma
ms
apropiada
para
las
transformaciones de mejora del cdigo (forma usualmente
llamada bytecode), como un paso intermedio antes de generar el
archivo objeto o el cdigo mquina para una mquina especfica.
Caractersticas destacadas:
Su principal ventaja es la portabilidad, pues el mismo cdigo
puede ser ejecutado en diferentes plataformas y arquitecturas.
Esta ventaja la tiene tambin los lenguajes interpretados,
aunque generalmente con mejor rendimiento. Por esto,
muchos lenguajes interpretados se compilan a bytecode y
despus son ejecutados por un intrprete de bytecode.
En Java generalmente se transmite el bytecode a la mquina
receptora y esta se encarga deutilizar un compilador just-intime para traducirlo a cdigo mquina antes de su ejecucin.
Tipos de lenguaje intermedio
Hay tres tipos de lenguaje intermedio los cuales son:
Tipo 1
Es una representacin ms abstracta y uniforme que un
lenguaje mquina concreto. Su misin es descomponer las
expresiones complejas en binarias y las sentencias complejas
en sentencias simples.
Ventajas:
Permite una fase de anlisis (anlisis semntico)
independiente de la mquina.
Se pueden realizar optimizaciones sobre el cdigo
intermedio (Las complejas rutinas de optimizacin son
independientes de la mquina.
Desventajas:

Perdida de eficiencia (no permite una compilacin de una


sola pasada).
Introduce en el compilador una nueva fase de traduccin.

Tipo 2
Tipo de lenguajes intermedios:
rbol sintctico.

rbol sintctico abstracto (todos los nodos del rbol


representan smbolos terminales, los nodos hijos son
operandos y los nodos internos son operadores).
Grafo dirigido acclico (GDA).
Notacin posfija.

Tipo 3

Tripletas Ejemplo:

d = a + b * c [1] (*, b, c) [2] (+, a, [1]) [3] (=, d, [2])


<operador>,<operando_1>, <operando_2>

2.

Cuartetos Ejemplo:
d = a + b * c (*, b, c, temp1) (+, a, temp1, temp2) (=, temp2, , d)

NOTACIONES
Dada una cierta expresin algebraica, existen bsicamente tres
formas diferentes de escribirla, notacin prefija, notacin infija
y notacin postfija, en funcin de la situacin concreta en la
que se pongan los operadores respecto de los operandos. As la
expresin algebraica que representa la suma entre un cierto
valor A y otro B se podra poner de la siguiente forma:
+AB Notacin prefija
A+B Notacin infija
AB+ Notacin postfija
La notacin utilizada habitualmente es la infija.
Si observamos un ejemplo adicional de notacin infija en la
que se utilicen ms de un operador podemos observar que
para realizar correctamente la operacin tenemos que conocer
una informacin adicional acerca de los operadores que
aparezcan: la prioridad.
Dependiendo de la prioridad del operador la operacin se
realizara antes o despus dando como consecuencia un
resultado distinto si variamos la prioridad de los operadores as

en A+B*C, se realizara
continuacin la suma.

primero

la

multiplicacin

Si deseamos variar la prioridad y en consecuencia el orden de


evaluacin de las operaciones hay que aadir una informacin
adicional que son parntesis.
Si en el ejemplo deseamos realizar primero la suma
deberemos incluirla entre parntesis (A+B)*C. Esta inclusin
de parntesis no es necesaria en notacin prefija o postfija. En
nuestro caso nos centraremos en las notaciones infijas (la
notacin habitual) y la postfija (ms conveniente para uso
interno en el ordenador).
Notacin Infija
Es la notacin comn de frmulas aritmticas y lgicas, en la
cual se escriben los operadores entre los operandos en que
estn actuando (ej. 2 + 2) usando un estilo de infijo. No es tan
simple de analizar (parser) por las computadoras, como la
notacin de prefijo (ej. + 2 2) o la notacin de postfijo (ej. 2 2
+), aunque muchos lenguajes de programacin la utilizan
debido a su familiaridad.
En la notacin de infijo, a diferencia de las notaciones de
prefijo o posfijo, es necesario rodear entre parntesis a los
grupos de operandos y operadores, para indicar el orden en el
cual deben ser realizadas las operaciones. En la ausencia de
parntesis, ciertas reglas de prioridad determinan el orden de
las operaciones.
Notacin Posfija
Tambin llamada Notacin Polaca Inversa (en ingls, Reverse
polish notation, o RPN), es un mtodo algebraico alternativo de
introduccin de datos. Su nombre viene por analoga con la
relacionada notacin polaca, una notacin de prefijo introducida
en 1920 por el matemtico polaco Jan Lukasiewicz, en donde
cada operador est antes de sus operandos. En la notacin
polaca inversa es al revs, primero estn los operandos y
despus viene el operador que va a realizar los clculos sobre
ellos. Tanto la notacin polaca como la notacin polaca inversa
no necesitan usar parntesis para indicar el orden de las
operaciones mientras la aridad del operador sea fija.
En ciencias de la computacin, la notacin de postfijo es
frecuentemente usada en lenguajes de programacin
concatenativos y basados en pila como PostScript, y es el

principio de operacin de ciertas calculadoras, notablemente las


de Hewlett-Packard.Tambin es comn en sistemas basados en
flujo de datos y tuberas, incluyendo las tuberas de Unix.
Su principio es el de evaluar los datos directamente
cuando se introducen y manejarlos dentro de una estructura
LIFO (Last In First Out), lo que optimiza los procesos a la hora
de programar.
Bsicamente la diferencias con el mtodo algebraico o notacin
de infijo es que, al evaluar los datos directamente al
introducirlos, no es necesario ordenar la evaluacin de los
mismos, y que para ejecutar un comando, primero se deben
introducir todos sus argumentos, as, para hacer una suma
'a+b=c' el RPN lo manejara a b +, dejando el resultado 'c'
directamente.
Notacin Prefija
Tambin conocida como Notacin Polaca, es una forma de
notacin para la lgica, la aritmtica, y el lgebra. Su
caracterstica distintiva es que coloca los operadores a la
izquierda de sus operandos (+34). Si la aridad de los
operadores es fija, el resultado es una sintaxis que carece de
parntesis u otros signos de agrupacin, y todava puede ser
analizada sin ambigedad. El lgico polaco Jan ukasiewicz
invent esta notacin alrededor de 1920 para simplificar la
lgica proposicional.
La notacin de prefijo ha visto una amplia aplicacin con las Sexpressions de Lisp, donde son requeridos los parntesis debido
a los operadores aritmticos que tienen aridad variable. El
lenguaje de programacin Ambi usa la notacin polaca para
operaciones aritmticas y la construccin del programa.
Aunque sea obvio, es importante observar que el nmero de
operandos en una expresin debe igualar al nmero de
operadores ms uno, de lo contrario la sentencia no tiene
ningn 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.

3. Representacin de Cdigo Intermedio


Existen maneras formales para representar cdigo intermedio;

tales como:

Polaca
Cdigo P
Triplos
Cudruplas

Estas notaciones simplifican la traduccin de nuestro cdigo


fuente a nuestro cdigo objeto ya que se ahorran y acotan
smbolos de la tabla de smbolos.
Polaca
Se utiliza principalmente para la representacin de expresiones
aritmticas.
Simple
No utiliza registros
Expresin a notacin polaca inversa

Algoritmo

Representar la expresin en forma de rbol sintctico.


Recorrer el rbol en postorden.
Ejemplo: a+b*c-d

Cdigo P
El cdigo P comenz como un cdigo ensamblador objetivo
estndar producido por varios compiladores Pascal en la
dcada de 1970 y principios de la de 1980. Fue diseado para
cdigo real para una mquina de pila hipottica la idea era

hacer que los compiladores de Pascal se transportaran


fcilmente requiriendo solo que se volviera a escribir el
intrprete de la maquina P para una plataforma, el cdigo P
tambin ha probado ser til como cdigo intermedio y sean
utilizado varias extensiones y modificaciones del mismo en
diverso compiladores de cdigo nativo, la mayor parte para
lenguaje tipo Pascal.
Como el cdigo P fue diseado para ser directamente
ejecutable, contiene una descripcin implcita de un ambiente
de ejecucin particular que incluye tamaos de datos, adems
de mucha informacin especfica para la maquina P, que debe
conocer si se desea que un programa de cdigo P se
comprensible. La mquina P est compuesta por una memoria
de cdigo, una memoria de datos no especfica para variables
nombre das y una pila para datos temporales, junto como
cualquiera registro que sea necesario para mantener la pila y
apoyar la ejecucin.
Triplos
Las proposiciones de tres direcciones se parecen mucho al
ensamblador, el cual es un lenguaje intermedio ms entendible
para la mquina. Con una estructura de tres campos se
pueden omitir los valores temporales, dicha estructura recibe
el nombre de triples y tiene los siguientes campos: op, arg1 y
arg2.
Generalmente el cdigo que generan los triples recibe el
nombre de cdigo de dos direcciones, aunque en ocasiones
puede variar. Cuando se utilizan triples se ocupan punteros a la
misma estructura.
Las expresiones lgicas tambin pueden pasarse a cdigo de
tres direcciones, utilizando para ello expresiones en corto
circuito.
La 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.

Cudruplas

Una cudrupla es una estructura de tipo registro con cuatro


campos: op, result, arg1 y arg2.
Por ejemplo, la proposicin de tres direcciones
se representara como: (suma, x, y, z).

En general, las instrucciones que no requieren todos los


campos dejan vacos los que no utilizan:
Ej: Las proposiciones con operadores unarios no utilizan arg.
Las
cudruplas
facilitan
la
aplicacin
de
muchas
optimizaciones, pero hay que tener un algoritmo para la
reutilizacin de las variables temporales (reutilizacin de
registros del procesador).
4.

Esquemas de Generacin
Los esquemas de generacin son las estrategias o acciones que
se debern realizarse y tomarse en cuenta en el momento de
generar cdigo intermedio. Los esquemas de generacin
dependen de cada lenguaje.

Expresiones
Para generar expresiones estas deben representarse de manera
ms simple y ms literal para que su conversin sea ms rpida.
Por ejemplo la traduccin de operaciones aritmticas debe
especificarse una por una, de tal forma que una expresin sea lo
ms mnimo posible.
Declaraciones de Variables Constantes
Las declaraciones de variables y constantes deben separarse
de tal manera que queden las expresiones una por una de
manera simple.
Por ejemplo int a,b,c; se descompone a int a; int b; intc;
respectivamente.
Estatuto de Asignacin
Las operaciones de asignacin deben quedar expresadas por
una expresin sencilla, si est es compleja se debe reducir
hasta quedar un operador sencillo.
Por ejemplo: x = a+b/5; debe quedar de la forma y = b/5; z =
a+y; x=z.

Estatuto Condicional

Las condiciones deben expresarse de manera lo ms sencilla


posible de tal forma que puedan evaluarse en cortocircuito. Por
ejemplo una instruccin como: if (a == b && f!=5 && f
%3==0) se evala primero x = (a==b && f!=5) y = x && f
%3==0; if (y).
Las instrucciones de decisin compleja como switch se reducen
a una versin complejas de ifs.
Estatuto Ciclos

Los ciclos se descomponen en un ciclo genrico, por lo que


ciclos while, for y dowhile tienen la misma representacin
interna. En el caso de C, todo queda en forma de while.
Las condiciones lgicas tambin pueden ser evaluadas en
cortocircuito y reducidas.
Arreglos
Los arreglos se descomponen en estructuras bsicas de manejo
de manera simple, as por ejemplo: char *a=Hola; se reduce
a: a[0]=H; a[1]=o; a[2]=l; a[3]=a; a[4]=\0;.
Funciones
Las funciones pueden reducir a en lnea, lo que se hace es
expander el cdigo original de la funcin.
Las funciones se descomponen simplificando los parmetros de
manera individual al igual que el valor de retorno.

Conclusin
Despus de los anlisis sintctico y semntico, algunos
compiladores generan una representacin intermedia explcita del
programa fuente. Se 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.
La representacin intermedia puede tener diversas formas, como
son La Polaca, el cdigo P, Triplos y Cudruplas. Los esquemas de
generacin son las estrategias o acciones que se debern realizarse
y tomarse en cuenta en el momento de generar cdigo intermedio y
es diferente en cada lenguaje.

También podría gustarte