Вы находитесь на странице: 1из 13

ANALISIS SEMANTICO, GENERACION Y

OPTIMIZACION DE CODIGO

Liliana PAUCAR PRADO.


Agosto de 2016.

UNIVERSIDAD NACIONAL DANIEL ALCIDES CARRION


Cerro de Pasco.
DISEO DE LENGUAJE DE PROGRAMACION

PROLOGO
En este ensayo explicaremos el comportamiento del analizador semntico, la
generacin de cdigo y tambin la optimizacin de cdigo y esto lo vamos a utilizar en
cuando programemos software.
En el analizador semntico se va ver lo que utiliza, la manera que ordena los atributos
y el uso de los cudruplas, tripletes.
En la generacin de cdigo se ve algunas descripciones de los operandos,
conversiones de tipos, tipos de cdigos y la manera de comportamiento dependiendo al tipo
de cdigo que se va utilizar
Mientras en la optimizacin de cdigo se basa ms que nada a la reduccin de cdigo,
quitar redundancias y de esta manera no utilizar mucho los recursos de la mquina, mejorar
el tiempo de respuesta de una operacin, etc.

CAPITULO I
ANLISIS SEMNTICO
Est compuesto por dos analizadores: morfolgico y sintctico
Utiliza el rbol sintctico para comprobar restricciones de tipo, algunas limitaciones y
prepara la generacin de cdigo
Propagacin de atributos
Se realiza tanto en bottom-up (hacia arriba) como en top- down (hacia abajo), ya que
estas van a transmitir las restricciones y los tipos de hojas son para la comprobacin
Sea la expresin
int a,b,c

a/(b+c ^2)

El rbol sintctico es:

Las transformaciones posibles se pueden representar mediante un grafo cuyos nodos son
los tipos de datos y cada arco indica una transformacin

Gramtica de atributos
Es una extensin de la notacin de Backus se basa en usar algunos smbolos adicionales
no sintcticos. En los analizadores sintcticos top-down basados en gramticas la
introduccin de los smbolos de accin en las rutinas correspondientes es trivial. En los
analizadores bottom-up basados en gramticas es ms delicado, pues los estados del anlisis
se mueven simultneamente sobre varias reglas.
Generacin de representaciones intermedias
Existen dos representaciones intermedias principales: Notacin sufija y Cudruplas
Los operadores didicos (o binarios) pueden especificarse mediante tres notaciones
principales:

Prefija: el operador didico es analizado antes que sus operandos.


Infija: el operador didico es analizado entre sus operandos.
Sufija: el operador didico es analizado despus que sus operandos.

Notacin sufija
Se representa sin usar parntesis, los identificadores aparecen en el mismo orden y los
operadores de izquierda a derecha.
Hay operadores mondicos (unarios) algunos se transforman en didicos (binarios) o
se cambia el smbolo.
Ejemplo: a se convierte en 0-a o en @a

a*(b+c/d) ab@cd/+*

Rutina semntica para transformar de infijo a sufijo


Se utiliza una pila donde se genera la salida, inicialmente vaca. Las acciones
semnticas asociadas a las reglas son:
E ::= E + T

Push +

T ::= F

E ::= E - T

Push -

F ::= i

E ::= T

Push i

F ::= (E)

T ::= T * F

Push *

T ::= T / F

Push /

F ::= - F

Push @

Anlisis de la notacin sufija


La gramtica completa que permite analizar la notacin sufija es:
<Operando> ::= id |
cte |
<Operando> <Operando> <Operador didico> |
<Operando> <Operador mondico>
<Operador didico> ::= + | - | * | / | ...
<Operador mondico> ::= @ | ...
Extensin de la notacin sufija a otros operadores

La transferencia (GOTO).
La instruccin condicional

GOTO L

if p then inst1 else inst2 se convierte en

L TR

p L1 TRZ inst1 L2 TR inst2

L1:

L2:
Cudruplas
Una operacin didica se puede representar mediante la cudrupla
(<Operador>, <Operando1>, <Operando2>, <Resultado>)
Ejemplo
Una expresin se puede representar mediante un conjunto de cudruplas. Ejemplo: la
expresin a*b+c*d equivale a:
(*,a,b,t1)
(*,c,d,t2)
(+,t1,t2,t3)

Triplete
A diferencia de las cudruplas aqu no se pone el resultado al lado sino q se sustituye
con el orden de ejecucin
Ejemplo
a*b+c*d equivale a:
(1) (*,a,b)
(2) (*,c,d)
(3) (+,(1),(2))
Generacin automtica de cudruplas
En un anlisis bottom-up, se asocia a cada smbolo no terminal una informacin
semntica, y a cada regla de produccin una accin semntica

Semntica de instrucciones condicionales


Sean las reglas
<Instr> ::= If <Expr> S2 then <Instr> S1 |
If <Expr> S2 then <Instr> else S3 <Instr> S1
Una secuencia de cudruplas equivalente a "If E1 then I1 else I2"
Semntica de etiquetas y GOTO
Suponemos que las etiquetas aparecen en la tabla de smbolos con tres valores
asociados: (tipo=etiqueta, bit=declarada/no declarada, nmero de cudrupla).

Semntica de bloques
Sean las reglas
<Instr> ::= do <id> := <Expr> S1
, <Expr> S2
<CD1> <LInstr> end S5
<CD1> ::= , <Expr> S3 | ^ S4
Evaluacin ptima de las expresiones booleanas
Las operaciones booleanas usualmente se definen as:
O|T F
Y|T F
NO| T F
---|-------|---------|----T|T T
T|T F
|F T
F|T F
F|F F
Y la sintaxis adecuada para que la precedencia sea: NO, Y, O. Sin embargo, es posible
simplificarlas considerablemente. Basta fijarse en la expresin: a Y (b O NO c)
CAPITULO II
GENERACIN DE CDIGO
El cdigo generado por un compilador puede ser de uno de los tipos siguientes:

Cdigo simblico (*.ASM, hay que pasrselo a un ensamblador).

Cdigo relocalizable (*.OBJ, hay que pasrselo a un "linker").

Cdigo absoluto (*.EXE, ms eficiente pero menos flexible. Slo en compiladores


antiguos).

Existen dos formas de realizar la generacin de cdigo:

En un solo paso: integrada con el anlisis semntico.

En dos o ms pasos: el analizador semntico genera un cdigo intermedio (cudruplas,


notacin sufija), a partir del cul se realiza la generacin del cdigo definitivo como
un paso independiente.
A.Semntico

G.Cdigo

Fuente -----------> Cudruplas --------> Objeto


|----------------------------------------|
A. Semntico
Operandos
Se representan usualmente por su direccin, se almacena en forma de una base y un
desplazamiento, pueden utilizarse registro ndices.
Indexado
Se realiza en un tipo ARRAY ya que se va ver las posiciones que van a tener los
operandos
Conversiones de tipo
Esta es un poco complicado para el anlisis semntico para la generacin de
cuadruplas de conversin
Manejo de registros
Se va manejar por medio de una tabla de funcin del tipo objeto, ya que en un registro
general de carga de registros se seleccionan registros que se van a utilizar siempre en cuando
teniendo en cuenta el tipo de registro , y la carga va depender el tipo de objeto que va cargar

Expresiones
La tabla de cdigo nos ayuda a ver mejor las expresiones tanto las diaticas como las
monadicas ya que el cambiuo de tipo se puede realizar de manera directa por medio de la
operacin de carga en registro, y esta nos reduce la parte dedicada a la generacin de cdigo
Generacin a partir de cudruplas
En esta parte se sustituye palabras como :
La multiplicacin se hara igual, sustituyendo "ADD" por "MUL".
La divisin se hara igual, sustituyendo "SUB" por "DIV".
Ejemplo: sea la expresin A*((A*B+C)-C*D)
Las cudruplas son:
Cudrupla

Se genera

------------

---------------

(*,A,B,T1)

MOV AC,A

MUL AC,B

T1

(+,T1,C,T2)

ADD AC,C

T2

(*,C,D,T3)

MOV T2,AC

(-,T2,T3,T4)

(*,A,T4,T5)

Valor de AC
-----------

MOV AC,C

MUL AC,D

T3

MOV T3,AC
MOV AC,T2

T2

SUB AC,T3

T4

MUL AC,A

T5

A partir de notacin polaca


Se da sustituyendo las evaluaciones (intrprete) por generacin de cdigo
(compilador).
Generacin de cdigo para la asignacin
Esta puede llevar diversas conversiones de tipos, que pudo haber pasado antes por el
analizador semntico
Generacin de cdigo para GOTO

Nombre (o puntero a la tabla de smbolos)

Tipo: interna, externa, subrutina, funcin, corrutina...

Si est definida o no.

Direccin.

Generacin de cdigo para instrucciones condicionales


En aqu se pueden llevar a cabo el caso de if else
Generacin de cdigo para bucles
En aqu se pueden llevar a cabo el caso de for, while, do-while
CAPITULO II
OPTIMIZACIN DE CDIGO

Se realiza durante la generacin de cdigo para poder mejorar el tiempo de respuesta,


usar menos recursos, etc
Instrucciones especiales ("idioms")
Algunas mquinas tienen instrucciones especiales que permiten acelerar ciertos
procesos
Reordenacin del cdigo
Es una manera de optimizar cdigo nos ayuda a ahorra instrucciones
Ejecucin en tiempo de compilacin
La ejecucin se da principalmente en las operaciones aritmticas
Este proceso no exige la generacin de las cudruplas, puede realizarse directamente
durante las rutinas semnticas asociadas al anlisis sintctico, especialmente si es Bottom-up.
Problema con la ejecucin en tiempo de compilacin: si tenemos un "cross-compiler"
Eliminacin de redundancias
Se eliminan para el uso de menos recursos y para ver si no hay loop, pero en algunas
ocasiones hay redundancias que no se pueden eliminar
Reordenacin de operaciones
Algunas operaciones puede mejorar el proceso y estas facilitaran el reconocimiento,
nos permite realizar en tiempo de compilacin la operacin y reconocer como parte comn de
las dos instrucciones

Optimizacin de bucles
Consiste

en quitar la operacin fuera del bucle, reduccin de la fuerza de una

operacin para esto tambin hay algunas tcnicas que os ayudan a optimizar los bucles
Regiones
Son bloques que van a separar cada parte del bucle o cdigo, y asi podremos entender
mejor las partes que debemos optimizar
Asignaciones muertas
Hay algunas instrucciones de cdigo cuyos valores calculados se utilizan slo en
determinadas circunstancias, es decir, a veces se utilizan los valores y a veces no lo son.
En otro aspecto tambin hay parte en donde se usa esa parte de cdigo pero no realiza ningn
cambio

Вам также может понравиться