Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Lenguajes Autómatas 2
2.1.1 Prefija
También conocida como notación polaca, es aquella en la que el operador se
coloca delante de los operandos.
En esta notación no es necesaria la utilización de paréntesis u otros signos de
agrupación, la posición de los operadores y de los operandos va a determinar el
orden en que la operación se va a realizar
El orden es operador, primer operando, segundo operando.
2.1.2 Infija
Es la notación común de fórmulas aritméticas y lógicas, en la cual se escriben los
operadores entre los operandos en que están actuando. No es tan simple de
analizar por las computadoras, como la notación de prefijo o la notación de
postfijo, aunque muchos lenguajes de programación la utilizan debido a su
familiaridad.
Ejemplo: a + b * c-d
Código a b c * + d-
2.2.2 Código P
Como el código P fue diseñado para ser directamente ejecutable, contiene una
descripción implícita de un ambiente de ejecución particular que incluye tamaños
de datos, además de mucha información específica para la maquina P, que debe
conocer si se desea que un programa de código P se comprensible. La máquina P
está compuesta por una memoria de código, una memoria de datos no específica
para variables nombre das y una pila para datos temporales, junto como
cualquiera registro que sea necesario para mantener
la pila y apoyar la ejecución.
2.2.3 Triplos
En la historia de los compiladores han sido utilizadas una amplia variedad de
representaciones intermedias como lo es la siguiente clase de representación de
código intermedio de un árbol de 3 direcciones, 2 para los operandos y una para la
ubicación del resultado. Esta clase incluye un amplio número de representaciones
diferentes entre las cuales encontramos cuádruplos y triples. La principal
diferencia entre estas notaciones y la notación postfija es que ellos incluyen
referencias explicitas para los resultados de los cálculos intermedios, mientras que
la notación posfija los resultados son implícitos al representarlos en una pila.
2.2.4 Cuádruplos.
Es una estructura tipo registro con cuatros campos que se llaman: op, arg1, arg2 y
resultado. OP tiene un código intermedio. Los operadores unarios como x:=-y no
utilizan arg2. Generalmente arg1, arg2 y resultado son valores de tipo puntero y
apuntan a una entrada en la tabla de símbolos.
os esquemas de
generación son las
estrategias o acciones que
se deberán realizarse
y tomarse en cuenta en el
momento de generar
código intermedio.
Los esquemas de
generación dependen de
cada lenguaje.
Tomaremos algunos
esquemas de generación
del lenguaje C.
os esquemas de
generación son las
estrategias o acciones que
se deberán realizarse
y tomarse en cuenta en el
momento de generar
código intermedio.
Los esquemas de
generación dependen de
cada lenguaje.
Tomaremos algunos
esquemas de generación
del lenguaje C.
os esquemas de
generación son las
estrategias o acciones que
se deberán realizarse
y tomarse en cuenta en el
momento de generar
código intermedio.
Los esquemas de
generación dependen de
cada lenguaje.
Tomaremos algunos
esquemas de generación
del lenguaje C.
os esquemas de
generación son las
estrategias o acciones que
se deberán realizarse
y tomarse en cuenta en el
momento de generar
código intermedio.
Los esquemas de
generación dependen de
cada lenguaje.
Tomaremos algunos
esquemas de generación
del lenguaje C.
os esquemas de
generación son las
estrategias o acciones que
se deberán realizarse
y tomarse en cuenta en el
momento de generar
código intermedio.
Los esquemas de
generación dependen de
cada lenguaje.
Tomaremos algunos
esquemas de generación
del lenguaje C.
Los esquemas de generación son las estrategias o acciones que se deberán
realizarse y tomarse en cuenta en el momento de generar código intermedio. Los
esquemas de generación dependen de cada lenguaje.
double pi = 3.1416
int b = 2
int suma = 23 + 34
double GRAVEDAD = 9.8
Una variable es un espacio en la memoria de la computadora que permite
almacenar temporalmente un dato durante la ejecución de un proceso, su
contenido puede cambiar durante la ejecución del programa.
2.3.2 Expresiones.
En esta función recibe una cadena que representa una línea de código intermedio
y toma las medidas oportunas para que ese código se utilice. Estas
medidas pueden se rescribir la línea en un fichero adecuado, almacenar la
instrucción en una lista que después se pasará a otros módulos, o cualquier otra
que necesitemos en nuestro compilador.
Expresiones aritméticas
Son aquella donde los operadores que intervienen en ella son numéricos, el
resultado es un número y los operadores son aritméticos. Los operadores
aritméticos más comúnmente utilizados son: +, - , * , / y %. Comenzamos el
estudio por las expresiones aritméticas. Lo que tendremos que haceres crear por
cada tipo de nodo un método que genere el código para calcular la expresión y lo
emita.
Saltos En el código de los saltos los operadores lógicos &&, y! son traducidos a
saltos, aunque estos no aparecen realmente en el código.
2.3.5 Funciones
Función del Lenguaje, entendemos que es el uso de la lengua que hace un
hablante. En simples palabras, las funciones del lenguaje son los diferentes
objetivos, propósitos y servicio que se le da al lenguaje al comunicarse, dándose
una función del lenguaje por cada factor que tiene éste, en donde la función que
prevalece es el factor en donde más se pone énfasis al comunicarse. Diversos
lingüistas (Karl Bühler, Román Jakobson, Michael Halliday...) han propuesto
distintas clasificaciones de las funciones del lenguaje: Bühler propuso que existían
únicamente tres funciones:
2.3.6 Estructuras
El código intermedio no es el lenguaje de programación de ninguna máquina real,
sino que corresponde a una máquina abstracta, que se debe de definir lo más
general posible, de forma que sea posible traducir este código intermedio a
cualquier máquina real. El objetivo del código intermedio es reducir el número de
programas necesarios para construir traductores, y permitir más fácilmente la
transportabilidad de unas máquinas a otras. Supóngase que se tienen n lenguajes,
y se desea construir traductores entre ellos. Sería necesario construir n*(n-1)
traductores. Sin embargo, si se construye un lenguaje intermedio, tan sólo son
necesarios2*n traductores. Así por ejemplo un fabricante de compiladores puede
construir un compilador para diferentes máquinas objeto con tan sólo cambiar las
dos últimas fases de la tarea de síntesis.
Aunque un programa fuente se puede traducir directa mente al lenguaje objeto,
algunas ventajas de utilizar una forma intermedia independiente de la máquina
son:
Bibliografías