Entradas

Mostrando las entradas de marzo, 2023

2.3.6 Estructuras

  Las estructuras de datos se emplean con el objetivo principal de organizar los datos contenidos dentro de la memoria del ordenador. Así, nuestra primera experiencia con estructuras comienza desde el momento mismo en que usamos en nuestros programas variables de tipos primitivos (char, short, int, float, etc). A la memoria del ordenador se le puede considerar como un gran bloque compuesto por una serie de BYTES dispuestos secuencialmente uno detrás de otro. por ejemplo, si un ordenador posee una memoria de 128MB (128 megas) entonces se le puede leer o escribir desde el BYTE 0 hasta el BYTE 128MB - 1 ( 0000000H .. 7FFFFFFH ) La idea de ver la memoria como un serie de bytes es buena, sin embargo no es suficiente ya que en la misma podemos guardar números, cadenas de caracteres, funciones, objetos, etc. de tal manera que surge la necesidad de establecer los mecanismos adecuados para dar cuenta de la forma, tamaño y objetivo de los datos almacenados. Según el tipo de micropr...

2.3.5 Funciones

Imagen
    Las funciones pueden reducir a en línea, lo que se hace que expandir el código original de la función. Las funciones se descomponen simplificando los parámetros de manera individual al igual que el valor de retorno.  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, Roman Jakobson, Michael Halliday ) han propuesto distintas clasificaciones de las funciones del lenguaje: Bühler propuso que existían únicamente tres funciones: La Representativa (por la cual se trasmiten informaciones objetivamente) La Expresiva o emotiva (que expresa sentimientos del emisor) La Conativa, mediante la que se influye en el receptor del mensaje a través de...

2.3.4 Instrucción de control

Imagen
  Permiten variar o alterar la secuencia normal de ejecución de un programa. Tipos: ·           Instrucciones condicionales o alternativas- ·           Instrucciones de salto. ·           Instrucciones repetitivas. Esta forma de programación sólo permite resolver problemas sencillos. Para resolver problemas más 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 instrucción o instrucciones un número determinado de veces. En éstos casos utilizaremos instrucciones de control iterativas o repetitivas (ciclos). Sentencias WHILE, DO-WHILE y FOR. En los lenguajes de programación hay estructuras y operadores que pe...

2.3.3 Instrucción de asignación

  La sintaxis general de la instrucción de asignación es: nombre_de_la_variable = valor El valor a la derecha del signo igual puede ser una constante, otra variable o una expresión que combine constantes y variables, pero siempre la variable y su valor deben ser del mismo tipo de dato. Ejemplos: edad% = 5 area! = 12.3 nombre$ = “Pedro”  Instrucciones de asignación compuesta Las instrucciones de asignación compuesta realizan primero una operación en una expresión antes de asignarla a un elemento de programación. En el siguiente ejemplo se muestra uno de estos operadores, +=, que incrementa el valor de la variable del lado izquierdo del operador con el valor de la expresión de la derecha. Una instrucción de asignación asigna el valor de una expresión a una variable. En general, si la variable que se va a asignar es una propiedad, la propiedad debe ser de lectura y escritura o de sólo escritura; en caso contrario, se produce un error de compilación. Si la variable es una variable de ...

2.3.1 Variables y 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. Una constate es un elemente de nombre con un valor predefinido, mientras que una  variable es un elemento de datos con nombre cuyo valor puede cambiar durante el curso de la ejecucion de un programa, estas pueden ser globales o locales. Int Tipo de datos entero ( + - seguido de 1 o más dígitos entre 0 y 9). Real Coma flotante (+- seguido de cero o más dígitos 0–9). Coma decimal seguida de 1 o más dígitos 0-9. Tenga en cuenta que todos los números se almacenan internamente como Float. String Cualquier cadena de caracteres Unicode válida especificada entre comillas. Constantes Una constante es un elemento de datos con nombre con un valor predefinido. No se puede cambiar el valor asignado a una constante predefinida. Las constantes predefinidas son: NULL Una referencia vacía. Parec...

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 ser escribir 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 hacer es crear por cada tipo de nodo un método que genere el código para calcular la expresión y lo emita. Ese código dejará el resultado en un registro, cuyo nombre devolverá el método como resultado. Para reservar estos registros temporales, utilizaremos una función, reserva. En principio bastar ‘a con que esta función devuelva un registro distint...

2.3 Esquema de Generación

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. Tomaremos algunos esquemas de generación del lenguaje C. Expresiones Instrucciones de control Para generar expresiones estas deben representarse de manera más simple y más literal para que su conversión sea más rápida. Por ejemplo la traducción de operaciones aritméticas debe especificarse una por una, de tal forma que una expresión sea lo más mínimo posible Son aquellas que asignan un valor a una variable o una exprecionejemplo X=23 ó Y=expresion Instruccion de asignacion Las funciones son un grupo de instrucciones con un propocito en general las cuales pueden recibir parametros, mientras que la estructura es un conjunto de datos elementales interelacionados que realizan siertas operaciones entre ellos variables y constantes Las declaraciones de variables y constantes deben separarse de...

2.2.3. Triplos

Imagen
  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 cuadruplos 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. §       La diferencia entre triples y cuadruplos es que con los triples es referenciado el valor intermedio hacia el número del triple que lo creo, pero en los cuádruplos requiere que ellos tengan nombres implícitos. §       Los triples tienen una ventaja obvia de ser más consistente, pe...

2.2.4 cuádruplos

Imagen
  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. Constituida por 4 elementos: un código de operación, dos operando de entrada y otro de salida para almacenar el resultado. Es una estructura tipo registro con cuatros campos que se llaman: Operador Operando1 Operando2 Resultado Donde operando1, operando2 y resultado  pueden ser constantes, identificadores y variables temporales definidos por el compilador mientras que operador representa una operación arbitraria. Operador Operando1 Operando2 Resultado * C D T1 + B T1 T2 = T2 A

2.2.2 código p

Imagen
 2.2.2 código p  El código P comenzó como un código ensamblador objetivo estándar producido por varios compiladores Pascal en la década de 1970 y principios de la de 1980. Fue diseñado para código real para una máquina de pila hipotética la idea era hacer que los compiladores de Pascal se transportaran fácilmente requiriendo solo que se volviera a escribir el intérprete de la maquina P para una plataforma, el código P también a probado ser útil como código intermedio y sean utilizado varias extensiones y modificaciones del mismo en diversos compiladores de código nativo, la mayor parte para lenguaje tipo Pascal. 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 d...

2.2 representaciones de código intermedio

Imagen
2.2 representaciones de código intermedio Estas notaciones simplifican la traducción de nuestro código fuente a nuestro código objeto ya que ahorran y acotan símbolos de la objeto ya que ahorran y acotan símbolos de la tabla de símbolo. Existen diversos tipos de símbolo. Existen diversos tipos de códigos intermedios que varían en cuanto a su sencillez, lo próximos que están a las maquinas reales y lo fácil que es  las maquinas reales y lo fácil que es trabajar con abajar con ellos, otros tipos de código ellos, otros tipos de código intermedio que representan los programas como árboles o grafos y representaciones mixtas que combinan grafos o árboles y representaciones lineales. Generación de Código Intermedio Proceso de Síntesis. Lenguaje Intermedio Generación de Código Ventajas del código intermedio:  • Facilitar la fase de optimización.  •  Aumentar la portabilidad del compilador de una máquina a otra.  • Se puede utilizar el mismo analizador para diferentes ge...

Código Java Notación polaca-polaca Inversa

Imagen
1. (8*7+6/3)+(7/3*5-3+6) NOTACION POLACA PREORDEN:       + + * 8 7 / 6 3 + - * / 7 3 5 3 6 OPERADOR OPERANDO OPERANDO RESULTADO * 8 7 ++(8*7) /63 +-*/73536 / 6 3 + +(8*7)(6/3 )+-*/73536 + (8*7) (6/3) +(8*7+6/3)+-* /73 536 / 7 3 +(8*7+6/3)+- *(7/3)5 36 * (7/3) 5 +(8*7+6/3)+ -(7/3*5)3 6 - (7/3*5) 3 +(8*7+6/3) +(7/3*5-3)6 + (7/3*5-3) 6 +(8*7+6/3)(7/6*5-3+6) + (8*7+6/3) (7/3*5-3+6) (8*7+6/3)+(7/3*5-3+6)   NOTACION POLACA INVERSA POSTORDEN:  8 7 * 6 3 / + 7 3 / 5 + 3 – 6 + + OPERANDO OPERANDO OPERADOR RESULTADO 8 7 * (8*7) 63/ +73/5*3-6++ 6 3 / (8*7)(6/3)+ 73/5*3-6++ (8*7) (6/3) + (8*7+6/3) 73/ 5*3-6++ 7 3 / (8*7+6/3) (7/3)5* 3-6++ (7/3) 5 * (8*7+6/3) (7/3*5)3- 6++ (7/3*5) 3 - (8*7+6/3) (7/3*5-3)6+ + (7/3*5-3) 6 + (8*7+6/3)(7/3*5-3+6)+ (8*7+6/3) (7/3*5-3+6) + (8*7+6/3)+(7/3*5-3+6)   public class ArbolBinarioExp NodoArbol NodoPila PilaArbolExp UsarArbolExpresiones Resultado