Sie sind auf Seite 1von 39

GENERADOR DE

CDIGO
INTERMEDIO
INTEGRANTES

ALBA EDITH AYALA GARCA


DIANA ABIGAIL SALAZAR VARGAS
DAVID FERNANDO VALDIVIA QUIROZ
FRANCISCO JAVIER CARRANZA HERRERA
LENGUAJE INTERMEDIO
En computacin, 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.
NOTACIONES
Las notaciones son representaciones de
datos, sujetas a reglas determinadas,
mismas que deben de ser respetadas por
todos los elementos que conformen su
categora especifica.
Pueden ser de 3 formas:
Infija
Prefija
Posfija
NOTACION INFIJA

La notacin infija es la manera en que se


escriben las operaciones aritmticas
habitualmente.
La regla establece que todos los operadores
a+b-5
deben permanecer entre los operandos.

No existe una estructura simple para representar


este tipo de notacin en la computadora por esta
razn se utilizan otras notaciones
NOTACION PREFIJA O 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.

Sus caractersticas principales son:

Los operandos conservan el mismo orden que la notacin infija


equivalente.

No requiere de parntesis para indicar el orden de precedencia de


operadores ya que el es una operacin.

Se evala la expresin binaria y el resultado se cambia como un nuevo


operando. Se repite este hasta que nos quede un solo resultado.

Se evala de izquierda a derecha hasta que encontremos el primer


operador seguido inmediatamente de un par de operandos.
NOTACION PREFIJA O POLACA
(6+4)*8(7+4)
NOTACION POSTFIJA

Se caracteriza por el hecho de


que el operador se encuentra
despus de los operandos.
Esto permite que en etapas
posteriores haya una
comprensin adecuada para llevar
a cabo la conversin al lenguaje
ensamblador.
Prioridad o precedencia (( A + B ) / C ) * ( E F )

( )[ ] { }
^ raz
*/
+-

REGLAS

Operador de igual precedencia se cambia


Operador de mayor precedencia se agrega a pila
Operador de menor precedencia saca
operadores
Parntesis derecho vaca la pila
REPRESENTACIONES DE CDIGO
INTERMEDIO
Existen distintos tipos de cdigo que se pueden utilizar como cdigo intermedio. En cualquier
caso, su funcin es actuar como puente entre el cdigo del lenguaje fuente de cualquier
lenguaje de programacin y el lenguaje maquina o ensamblador, segn sea el caso, todo con la
finalidad de que los programas convertidores tengan menos variantes a tomar en cuenta y
puedan realizar la conversin de manera adecuada.
CDIGO P

El cdigo P es utilizado por los lenguajes de programacin que emplean un interprete en lugar de
un compilador para obtener el cdigo fuente de un programa escrito en un lenguaje de
programacin de alto nivel. Las tareas fundamentales del interprete son analizar, convertir y
ejecutar lnea por lnea. Tan pronto como el interprete detecta un error en el programa fuente, y
sin importar de que tipo sea ste, la ejecucin se interrumpe.
El uso del cdigo P importa diversos beneficios, como la portabilidad, una implementacin
sencilla, ahorro de espacio y un manejo ptimo de la depuracin.
TRIPLOS O TRIPLETAS

Los triplos, triples o tripletas constituyen una estructura de datos que representa la perspectiva
lgica de la generacin de un cdigo intermedio basado en los operandos y operadores, para
generar operaciones temporales que, en conjunto, forman una operacin compuesta.
Estas operaciones temporales se almacenan en tablas de smbolos con tres columnas, en un
estilo acorde con el lenguaje ensamblador, de manera que cuando se llegue la etapa de
generacin de cdigo final solamente se lea estas tablas y se efectu automticamente la
conversin. Digamos, por ejemplo, que tenemos la asignacin w=x+y+24-z.
El siguiente es el anlisis del ensamblador:
MOV AX,X; PONE [ X ] EN AX
ADD AX,Y; SUMA [ Y ] A AX
ADD AX, 24; SUMA 24 A LA SUMA
SUB AX, Z; RESTA Z DE X+Y+24
MOV W, AX; ALMACENA EL
RESULTADO EN W

El triplo de esta expresin aritmtica seria ste:

Dar objeto Dato fuente Operador Descripcin


T1 x = Asigna el valor de x a una variable temporal
T1 Y + Se suma el valor de y a la variable temporal
T1 24 + Se suma la constante a la variable temporal
T1 Z - Se resta el valor de z a la variable temporal
W T1 = Se asigna la variable temporal al identificador
CUDRUPLOS
Los cudruplos constituyen otra estructura lgica basada en los operandos y operadores. No
obstante, a diferencia de los triplos , stos cuentan con cuatro columnas , lo cual resulta
conveniente cuando existen operaciones que se realizan con un cudruplo, mientras que se
requeriran dos o ms triplos para la misma instruccin. Para comprender mejor la diferencia
entre ambas estructuras, presentamos a continuacin el mismo ejemplo que se utiliz con los
triplos: w=x+y+24-z. analizando la codificacin a ensamblador de dicha expresin, tenemos que:

MOV AX,X; PONE [ X ] EN AX


ADD AX,Y; SUMA [ Y ] A AX
ADD AX, 24; SUMA 24 A LA SUMA
SUB AX, Z; RESTA Z DE X+Y+24
MOV W, AX; ALMACENA EL RESULTADO EN W
El cudruplo de esta expresin aritmtica seria:
Dato Dato Dato Operacin
objeto fuente 1 fuente 2
T1 x y +
T1 T1 24 +
W T1 Z -
ESQUEMAS DE GENERACIN
Cuando se disean las tripletas o triplos y los cudruplos, es importante tener bien definido
el lenguaje objeto, es decir, si se va a convertir a lenguaje ensamblador o al lenguaje maquina.
cmo se agregan los renglones de los triplos o cudruplos?
w=x+y+24-z

Posfija Prefija
wxy+24+z-= =w-++xy24z

En cualquier caso, se debe establecer un algoritmo de lectura para cualquiera de las dos
notaciones, y utilizar ese seguimiento para llenar el triplo.
PASOS
1. Se recorre la expresin que se encuentra en notacin prefija o posfija hasta el primer
operador, y le asignamos ese operador con los operadores previos o posteriores segn sea
el caso.
2. Cuando se utilizan triplos se realiza un algoritmo que asigne el primer operando a una
variable temporal y despus realice la operacin de esa variable temporal, y el segundo
operando con el operador.
3. Cuando se emplean cudruplos, se asigna directamente los dos operandos y el operador en
el registro del cudruplo. Esto se debe repetir hasta terminar la expresin completa.
NOTACIN
POSFIJA
Por ejemplo, considerando la cadena: wxy+24+z-, el algoritmo se desarrollar como sigue:
P1: Se asigna la expresin posfija a un identificador llamado cadena original:

Cadena original = wxy+24+z-=(en tokens ID01 ID02 ID03 OA01 CE01 OA01 ID04 OA02 ORAS)
P2: Se asigna token por token a una cadena auxiliar hasta que se encuentre el operador:
Cadena auxiliar =wxy+ (en tokens ID01 ID02 ID03 OA01)

P3: Se toma el operador y los dos operadores anteriores, y se asignan al identificador llamado
Cadena auxiliar 2=xy+(en tokens ID02 ID03 OA01)
P4: Se agregan dos registros en tripletas y uno en cudruplo:

Dar Dato Operador Dar Dato Dato Operador


objeto fuente objeto fuente 1 fuente 2
1 T1 ID02 (x) = T1 ID02(x) ID03(y) OA01(+)
2 T1 ID03 (y) OA01 (+)
P5: Se sustituye la variable temporal en la cadena auxiliar:
Cadena auxiliar: WT1 (en tokens ID01 TE01)
P6: Se verifica el fin de cadena original:
Verdadero: se asigna la cadena auxiliar a la cadena original
Falso: se regresa al paso P2
El ciclo contina desarrollndose as:
Iteracin 2
P2: cadena auxiliar: wT1 24 + (en tokens ID01 TE01 CE01 OA01)
P3: cadena auxiliar 2: T1 24 + (en tokens TE01 CE01 OA01)
P4:
Dato Dato Operador Dar Dato Dato Operador
objeto fuente objeto fuente 1 fuente 2
1 T1 ID02 (x) = T1 ID02 (x) ID03 (y) OA01(+)
2 T1 ID03 (y) OA01 (+) T1 T1 CE01 (24) OA01 (+)
T1 CE01 (24) OA01 (+)

P5: cadena auxiliar: wT1 (ID01 TE01)


P6: No termina an
Iteracin 3
P2: cadena auxiliar: wT1 z + (en tokens ID01 TE01 ID04 OA02)
P3: cadena auxiliar 2: T1 z + (en tokens TE01 ID04 OA02)
P4:

Dato Dato Operador Dar Dato Dato Operador


objeto fuente objeto fuente 1 fuente 2
T1 ID02 (x) = T1 ID02 (x) ID03 (y) OA01 (+)
1
T1 ID03 (y) OA01(+) T1 T1 CE01 (24) OA01(+)
2
3 T1 CE01 (24) OA01(+) T1 T1 ID04 (z) OA02(-)
4 T1 ID04 (z) 0A02(-)

P5: cadena auxiliar: wT1 (en tokens ID01 TE01)


P6: No termina an
Iteracin 4
P2: cadena auxiliar: wT1 + (en tokens ID01 TE01 ORAS)
P3: cadena auxiliar 2: wT1 + (en tokens ID01 TE01 ORAS)
P4:

Dato Dato Operador Dar Dato Dato Operador


objeto fuente objeto fuente 1 fuente 2
T1 ID02 (x) = T1 ID02 (x) ID03 (y) OA01(+)
1
2 T1 ID03(y) OA01(+) T1 T1 CE01(24) OA01(+)
3 T1 CE01(24) OA01(+) T1 T1 ID04(z) OA02(-)
4 T1 ID04(z) OA02(-) ID01(w) T1 ORAS(=)
ID01(w) T1 =

P5: cadena auxiliar: w (en tokens ID01)


P6: Fin de cadena
NOTACIN
PREFIJA
La conversin se realiza de la misma manera, tomando como cadena original la notacin prefija:
P1: Se asigna la expresin posfija a un identificador a un identificador llamado cadena original:
Cadena original: = =w-++xy24z (en tokens ORAS ID01 OA02 OA01 OA01 ID02 ID03 CE01
ID04)
P2: Se asigna token por token a cada cadena auxiliar hasta que se encuentre un operador seguido
de dos operadores:
Cadena auxiliar = =w-++xy (ORAS ID01 OA02 OA01 OA01 ID02 ID03)
P3: Se toma el operador correspondiente y los operadores, y se asigna a un identificador
llamado cadena auxiliar 2:
Cadena auxiliar 2: = +xy (OA01 ID02 ID03)
P4: Se agrega dos registros en tripletas y uno en cudruplo:

Dato Dato Operador Dar Dato Dato Operador


objeto fuente objeto fuente 1 fuente 2
1 T1 ID02(x) = T1 ID02(x) ID03(y) OA01(+)
2 T1 ID03(y) OA01(+)
P5: Se sustituye la variable temporal en la cadena auxiliar:
Cadena auxiliar: =w-+T1(en tokens ORAS ID01 OA02 OA01 TE01)
P6: Se verifica el fin de la cadena original
Verdadero: se termina la ejecucin
Falso: se regresa al paso P2
El ciclo contina desarrollndose as:
Iteracin 2
P2: Cadena auxiliar = =w-+T1 24 (ORAS ID01 OA02 OA01 TE01 CE01)
P3: Cadena auxiliar 2: +T1 24 (OA01 TE01 CE01)
P4:

Dato Dato Operador Dar Dato Dato Operador


objeto fuente objeto fuente 1 fuente 2
T1 ID02(x) = T1 ID02(x) ID03(y) OA01(+)
1
2 T1 ID03(y) OA01(+) T1 T1 CE01(24) OA01(+)
T1 CE01(24) OA01(+)

P5: cadena auxiliar: =w-T1 (en tokens ORAS ID01 OA02 TE01)
P6: No termina an
Iteracin 3
P2: Cadena auxiliar = w-T1 z ( en tokens ORAS ID01 OA02 TE01 ID03)
P3: Cadena auxiliar 2: -T1 z (en tokens OA02 TE01 ID03)
P4:
Dato Dato Operador Dar Dato Dato Operador
objeto fuente objeto fuente 1 fuente 2
1 T1 ID02(x) = T1 ID02(x) ID03(y) OA01(+)
2 T1 ID03(y) OA01(+) T1 T1 CE01(24) OA01(+)
3 T1 CE01(24) OA01(+) T1 T1 ID04(z) OA02(-)
4 T1 ID04(z) 0A02(-)

P5: cadena auxiliar: =wT1 (en tokens ORAS ID01 TE01)


P6: No termina an
Iteracin 4
P2: Cadena auxiliar = wT1 ( en tokens ORAS ID01 TE01)
P3: Cadena auxiliar 2: wT1 (en tokens ORAS ID01 TE01)
P4:

Dato Dato Operador Dar Dato Dato Operador


objeto fuente objeto fuente 1 fuente 2
1 T1 ID02(x) = T1 ID02(x) ID03(y) OA01(+)
2 T1 ID03(y) OA01(+) T1 T1 CE01(24) OA01(+)
3 T1 CE01(24) OA01(+) T1 T1 ID04(z) OA02(-)
4 T1 ID04(z) OA02(-) ID01(w) T1 ORAS(=)
ID01(w) T1 =

P5: cadena auxiliar: w (en tokens ID01)


P6: Fin de cadena
EXPRESIONES E
INSTRUCCIONES
DE ASIGNACIN
EXPRESIONES ARITMTICAS

En este tipo de expresiones es preciso establecer estndares que permitan


convertirlas fcilmente, sin importar cun complicadas sean.

Lo primero y ms adecuado seria convertir la expresin a notacin postfija o


prefija.

Despus trasladar a Triplos o Cudruplos


Ejemplo:
w=x+y+24-z
Despus de pasar por la fase de lxico la expresin seria:
ID01 OASI ID02 OA01 ID03 OA01 CE01 OA02 ID04
Al pasar a Postfija seria:
ID01 ID02 ID03 OA01 CE01 OA01 ID04 OA02 OASI
La tabla de smbolos de identificadores y constantes numricas quedan como sigue:
Identificadores Constantes numricas
ndice Nombre Tipo de dato ndice Nombre Tipo de dato
contenido contenido

01 w Real 01 24 Entero
02 x Entero
03 y Entero
04 z Real
Triplos o Tripletas
ID01 ID02 ID03 OA01 CE01 OA01 ID04 OA02 OASI Se asigna el identificador 2 a una variable temporal
ID01 T1 ID03 OA01 CE01 OA01 ID04 OA02 OASI Se aplica el operador aritmtico 1 a la variable
temporal 1 y al identificador 3
ID01 T1 CE01 OA01 ID04 OA02 OASI Se aplica el operador aritmtico 1 a la variable
temporal 1 y a la constante numrica 1
ID01 T1 ID04 OA02 OASI Se aplica el operador aritmtico 2 a la variable
temporal 1 y al identificador 4
ID01 T1 OASI Se aplica el operador de asignacin al identificador
1 y la variable temporal 1

La razn por la que se asigna el ID02 y no el ID01 es


porque el ID02 es el primero que entrara en accin con
alguna operacin.
Cudruplos
ID01 ID02 ID03 OA01 CE01 OA01 ID04 OA02 OASI Se aplica el operador aritmtico 1 a los identificadores
2 y 3, y se asigna el resultado a la variable temporal 1
ID01 T1 CE01 OA01 ID04 OA02 OASI Se aplica el operador aritmtico 1 a la variable
temporal 1 y la constante entera 1
ID01 T1 ID04 OA02 OASI Se aplica el operador aritmtico 2 a la variable
temporal 1 y al identificador 4, y se asigna al
identificador 4

Cuando existe el operador de


Los triplos por lo general utilizan mas registros debido a
asignacin se puede evitar un
que solo cuentan con 3 parmetros.
cudruplo y asignar
directamente el resultado de la
Los cudruplos permiten utilizar menos registros, ya que
ultima operacin al identificador
se cuenta con un parmetro extra.
que recibe la asignacin.
INSTRUCCIONES DE SELECCIN
Dentro de este tipo de instrucciones por lo general se encuentran el SI ENTONCES y las de
seleccin mltiple, como SELECT CASE.
Las operaciones de seleccin van estrechamente ligadas a una condicin y sta, a su vez, tiene
vinculo con los operadores relacionales y lgicos.

Ejemplo:

SI ( a > 10 ) & ( a < 20 ) ENTONCES


a=a+1
SINO
a = 10
FINSI
Despus de pasar por la etapa de anlisis lxico, la instruccin queda de la siguiente manera:

SI ( a > 10 ) & ( a < 20 ) ENTONCES


PR06 CAE1 ID01 OR01 CE01 CAE2 OL01 CAE1 ID01 OR02 CE02 CAE2 PR07
a = a + 1
ID01 OR03 ID01 OA01 CE03
SINO
PR08
a = 10
ID01 OR03 CE01
FINSI
PR09
Cuando el archivo de tokens pasa por el analizador sintctico y semntico, debe proceder a
detectar una expresin lgica llamada condicin. Dicha condicin es convertida a notacin
prefija o postfija, quedando como sigue:

PR06 ID01 CE01 OR01 ID01 CE02 OR02 OL01 PR07


ID01 ID01 CE03 OA01 OR03
PR08
ID01 CE01 OR03
PR09
Cuando una expresin se transforma en notacin prefija o postfija es posible utilizar tokens
bandera, los cuales funcionan como una herramienta para expresar un delimitador.
De esta manera es mas fcil efectuar el rastreo y hacer la conversin a triplo o cudruplo.

PR06 POST ID01 CE01 OR01 ID01 CE02 OR02 OL01 POST PR07
POST ID01 ID01 CE03 OA01 OR03 POST
PR08
POST ID01 CE01 OR03 POST
PR09
Al analizar la instruccin mediante cdigo ensamblador tenemos que:
MOV AX, ID01 ; PONE [ ID01 ] EN AX
CMP AX, CE01 ; COMPARA AX y CE01
JG ET1; SI AX ES MAYOR TRASLADA EL CONTROL A LA ETIQUETA 1
JMP ET3; DE LO CONTRARIO TRASLADA EL CONTROL A LA ETIQUETA 3
ETI: CMP AX,CE02; COMPARA AX y CE02
JL ET2; SI AX ES MENOR TRASLADA EL CONTROL A LA ETIQUETA 2
JMP ET3; DE LO CONTRARIO TRASLADA EL CONTROL A LA ETIQUETA 3
ET2: ADD AX,1; SUMA 1 A AX
JMP ET4;
ET3: MOV AX,CE01; ASIGNA CE01 A AX
ET4: END

El cdigo en ensamblador es una gua de la estructura que debe tener el triplo o tripleta de
esta instruccin.
Triplo Cudruplo

Dato objeto Dato Operador Dato Dato Dato Operador


fuente objeto fuente fuente
1 T1 ID01(a) = 1 T1 ID01(a) ID01(a) OR01(>)
2 T2 CE01(10) = 2 T2 ID01(a) CE02(20) OR02(<)
3 T1 T2 OR01(>) 3 T3 T1 T2 OL01(&)
4 TR1 TRUE 6 4 CUTR T3 Verdadero
5 TR1 FALSE 11 5 ET 7
6 T3 CE02(20) = 6 CUFA T3 Falso
7 T1 T3 0R02(<) 7 FIN
8 TR2 TRUE 10
9 TR2 FALSE 11
SI ( a > 10 ) & ( a < 20 ) ENTONCES
10 ET TRTRUE a=a+1
11 ET 13 SINO
12 ET TRFALSE a = 10
FINSI
13 FIN
Triplo TRTRUE Cudruplo CUTR
Dato Objeto Dato Operado Dato Dato Dato Operador
Fuente r Objeto Fuente Fuente2

T4 ID01(a) CE03(1) OA01(+)


1 T4 ID01(a) =
2 T4 CE03(1) OA01(+)

Triplo TRFALSE Cudruplo CUFA

Dato Objeto Dato Operado Dato Dato Dato Operador


Fuente r Objeto Fuente Fuente2

T4 CE01(10) OR03(=)
1 T4 CE01(10) =

Das könnte Ihnen auch gefallen