Documente Academic
Documente Profesional
Documente Cultură
2.1 NOTACIONES
Notacin prefija, infija y posfija 1 Consideremos la suma de A y B. Sabemos que
tenemos que aplicar el operador aritmtico + a los operandos A y B. Esta
expresin aritmtica se puede escribir de tres formas:
A+B, notacin infija. Esta es la forma ms comn para representar la
operacin, en donde el operador aritmtico est entre los operandos.
+AB, notacin prefija. El operador aritmtico precede a los operandos.
AB+, notacin posfija. El operador aritmtico sucede a los operandos.
En el caso de la notacin infija, si slo hay un operador involucrado no existe
mayor problema, pero si en la expresin aritmtica hay ms de uno, se necesita
saber cul de los operadores tiene precedencia sobre los dems. Por ejemplo, en
la expresin A+B*C, el operador * tiene precedencia sobre el operador +. Si no
se define la precedencia de los operadores, las expresiones seran ambiguas. La
ventaja de las notaciones prefija y posfija es que no dan pie a ambigedades.
Retomemos el ejemplo anterior. Si consideramos la expresin A+B*C, su notacin
prefija es +*BCA, pero si consideramos (A+B)*C, en prefijo sera *+ABC. En el
caso de la notacin posfija, las expresiones anteriores se escriben como ABC*+ y
AB+C*.
Formada por operandos y operadores: A*B/(A+C).
Los operandos son variables que toman valores enteros o reales.
Operadoes:
Parntesis
Potencia
Multiplicacin / Divisin
Suma / Resta
En caso de igualdad de prioridad:
()
^
*/
+-
ab*
a*(b+c/d)
abcd/+*
a*b+c*d
ab*cd*+
Ejemplo:
Si deseamos representar las expresiones (2+(3*4)) = x y ((2+3)*4)= x en las tres
notaciones mencionadas, el resultado sera:
Notacin prefija
[ + ( )] =
= +2 3 4
[( + ) ] =
= +2 3 4
Notacin infija
Notacin postfija
2+34=
2 3 4 + =
(2 + 3) 4 =
23+4 =
Polaca
Cdigo P
Triplos
Cudruplas
Simple
No utiliza registros
Algoritmo
Representar la expresin en forma de rbol sintctico.
Recorrer el rbol en postorden.
Ejemplo: a+b*c-d
Figura 1. Ejemplo a b c * + d
SALIDA
Para cada caso de prueba el programa deber escribir, en una lnea independiente,
el valor de la expresin. Se garantiza que tanto los resultados parciales como los
nal sern menores que 231 valor absoluto, y nunca habra divisiones por 0.
un
atributo de cadena
2.2.3 Triplos
Un triple solo tiene tres campos, a los cuales llamamos op, arg1 y arg2. Al usar
tripletas nos referimos al resultado de una posicin x op y por su posicin, en vez de
usar un nombre temporal implcito. Por ende, en vez del valor temporal t1, una
representacin en tripletas se refera a la posicin (0). Los nmeros entre parntesis
representan apuntadores a la misma estructura de las tripletas
Ejemplo: el rbol sintctico y las tripletas corresponden al cdigo de las tres
dimensiones y los cudruplos. En la representacin en tripletas la instruccin de
copia a= t5 est codificada en la representacin en tripletas, mediante la colocacin
de a en el campo arg1 y (4) en el campo arg2.
Una operacin termina como x[i] = y requiere dos entradas en la estructura de las
tripletas; por ejemplo, podemos colocar a x e i en una tripleta y a y en la siguiente.
De esta manera similar, podemos implementar x = y[i] tratndola como si fuera las
dos instrucciones t = y[i] y x = t,
op
arg1 arg2
menos
menos
(0)
(2)
(1)
(3)
(4)
op
0
1
2
3
4
5
menos
*
menos
*
+
=
t1
t3
t4
t1
t2
t3
t4
t5
A
y = b/5;
z = a+y;
x=z.
2.3.4 Instrucciones de control.
Instrucciones de control Esta forma de programacin slo permite resolver
problemas sencillos. Para resolver problemas ms complejos, nos puede interesar
que dependiendo de los valores de los datos, se ejecuten unas instrucciones u otras.
Las instrucciones condicionales nos van a permitir representar ste tipo de
comportamiento. Sentencias IF y SWITCH. En otros casos, nos encontraremos con
la necesidad de repetir una instruccin o instrucciones un nmero determinado de
veces. En stos casos utilizaremos instrucciones de control iterativas o repetitivas
(ciclos). Sentencias WHILE, DO-WHILE y FOR.
2.3.4.1 Sentencia IF-THEN-ELSE
El caso de la sentencia IF es el ms simple. Aqu basta con indicar que la etiqueta
de verdad de la condicin est asociada al cdigo a continuacin del THEN, y la
etiqueta de falso se asocia al cdigo que puede haber tras el ELSE. En cualquier
caso, una vez acabadas las sentencias del THEN se debe producir un salto al final
del IF, porque no queremos que se ejecuten tambin las sentencias del ELSE. Por
tanto, tras la sentencias del THEN, creamos una nueva etiqueta a la cual
produciremos un salto, y colocamos el destino de tal etiqueta al final del cdigo del
IF. Esto puede apreciarse mejor con un ejemplo:
cdigo, pero la funcin no se ejecuta en ese punto. Una llamada crea valores reales
para los parmetros (o argumentos para la Llamada) y realiza un salto hacia el
cdigo de la funcin, el cual se ejecuta entonces y regresa.
El ambiente de ejecucin en el que sta tiene lugar no se conoce cuando se crea el
cdigo para la funcin, excepto en su estructura general. Este ambiente de
ejecucin es construido en parte por el elemento que llama, y en parte por el cdigo
de la funcin llamada; esta divisin de la responsabilidad forma parte de la
secuencia de llamada estudiada en el captulo anterior.
El cdigo intermedio para una definicin debe incluir una instruccin que marque el
inicio, o punto de entrada, del cdigo para La funcin, y una instruccin que marque
el final, o punto de retorno, de la funcin. De manera esquemtica podemos escribir
esto de la manera siguiente:
Instruccin de entrada
<cdigo para el cuerpo de la funcin>
Instruccin de retorno
De la misma manera, una llamada de funcin debe tener una instruccin que indique
el principio del clculo de los argumentos (en preparacin para la llamada) y luego
una instruccin de llamada red que indique el punto en que los argumentos han sido
construidos y el salto real hacia el cdigo de la funcin puede tener lugar:
Instruccin de comienzo de clculo de argumento
<cdigo para calcular los argumentos>
Instruccin de llamada
Diferentes versiones del cdigo intermedio tienen versiones muy diferentes de estas
cuatro instrucciones agrupadas, en particular respecto a la cantidad de informacin
acerca del ambiente, los parmetros y la funcin misma que es parte de cada
instruccin. Ejemplos tpicos de tal informacin incluyen el nmero, tamao y
ubicacin de los parmetros; el tamao del marco de pila; el tamao de las variables
locales y el espacio temporal, as como diversas indicaciones del uso del registro
por la funcin llamada. Como es habitual, presentaremos cdigo intermedio que
contiene una mnima cantidad de informacin en las instrucciones mismas, con la
idea de que cualquier informacin necesaria puede mantenerse separadamente en
una entrada de la tabla de smbolos para el procedimiento.
2.3.6 Estructuras
Una estructura de datos que representa el programa fuente durante la traduccin
se denomina representacin intermedia, o IR (por las siglas del trmino en ingls)
para abreviar. En este texto hasta ahora hemos usado un rbol sintctico abstracto
como el IR principal. Adems del IR, la principal estructura de datos utilizada durante
la traduccin es la tabla de smbolo.
BIBLIOGRAFIA
Aho, A.V., Sethi, R., Ullman, J.D. (1990), Compiladores: principios, tcnicas y
herramientas.
Louden, K.C. (1997), Compiler Construction: Principles and Practice.
Barajas, A. and Salgado, J. (2013). Lenguajes y Automatas II. [online] prezi.com.
Available at: https://prezi.com/auqbjglcicxo/lenguajes-y-automatas-ii/
[Accessed 19 Sep. 2016].
Pilas y expresiones aritmticas. (n.d.). Estructura de datos y de la informacin.
[online] Available at: http://quegrande.org/apuntes/EI/1/EDI/teoria/06-07/tad__pila_-_expresiones_aritmeticas.pdf [Accessed 19 Sep. 2016].