Entradas

Mostrando las entradas de marzo, 2023

2.3.6 Estructuras

Imagen
  Estructura y fases de un compilador (2) Análisis lineal También conocido como: análisis léxico o exploración. Ejemplo, en la proposición de asignación: posicion = inicial + velocidad * 60 Se identifican los siguientes componentes léxicos Identificador (posicion) Símbolo de asignación (=) Identificador (inicial) Signo de suma (+) Identificador (velocidad) Signo de multiplicación (*) Número (60) 12.  Estructura y fases de un compilador (3) Análisis jerárquico También llamado análisis sintáctico. Implica agrupar los componentes léxicos en frases gramaticales que el compilador utiliza para sintetizar la salida. Por lo general, las frases gramaticales se representan mediante un árbol de análisis sintáctico. Ejemplo: Proposición de asignación Identificador posición = expresión expresión identificador + expresión inicial expresión identificador * expresión velocidad Número 60 13.  Estructura y fases de un compilador (4) La estructura jerárquica de un programa normalmente se ex...

2.3.5 Funciones.

  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 órdene...

2.3.4 Instrucciones de control.

Imagen
  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 permiten controlar el flujo de la ejecución, estos pueden ser ciclos, saltos, condiciones entre otros. Expresiones booleanas En los lenguajes de programación, las expresiones booleanas tienen dos propósitos principales. Se utilizan para calcular valores lógicos y como expresiones condicionales en proposiciones que alteran el flujo del control, como...

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.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.1 Variables y constantes.

Imagen
  Las 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. 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. Las variables utilizadas en los programas se clasifican en dos tipos: variables locales y variables globales. Variables locales: Aquella que está declarada para el programa o algoritmo completo. •   Para definir variables locales, la definición debe hacerse inmediatamente después de una llave de inicio ( { ), y la variable deja de existir fuera de la llave de fin( } ) que corresponde a la llave de inicio después del cuál fue definida la variable. Ejemplo: { int  a,b; a=5; b=a + 100; } Variables globales: Aquella que está declarada y definida dentro de una función y sólo es válid...

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 separa...

2.2.4 Cuádruplos.

Imagen
 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.

2.2.3. Triplos

Imagen
Las proposiciones de tres direcciones se parecen mucho al ensamblador, el cual es un lenguaje intermedio más entendible para la máquina. • Las estructuras de control (if, switch, while, do-while, for) son realmente etiquetas goto disfrazadas. • El problema de utilizar cuádruplos radica en que se tienen que colocar los valores temporales en la tabla de símbolo. Con una estructura de tres campos se pueden omitir los valores temporales, dicha estructura recibe el nombre de triples y tiene los siguientes campos: op, arg1 y arg2. Generalmente el código que generan los triples recibe el nombre de código de dos direcciones, aunque en ocasiones puede variar. Cuando se utilizan triples se ocupan punteros a la misma estructura de los triples.   * b t1 t2 //cuádruplos.  * b (0) //triple.   • Se debe tener en cuenta el proceso de asignación, de declaración, expresiones booleanas. Las expresiones lógicas también pueden pasarse a código de tres direcciones, utilizando para ello ex...

2.2.2 Codigo p

Imagen
 El código P hace referencia a máquinas que utilizan o se auxilian de pilas para generar código objeto. En muchos caso la P se asociado a código portable el cual garantiza que el código compilado en una máquina se pueda ejecutar en otras. Para garantizar la portabilidad del código se necesita que el lenguaje este estandarizado por algún instituto y que dicho código no tenga extensiones particulares. También se recomienda la no utilización de características especiales exclusivas de alguna arquitectura de computadoras en particular.

2.2 representaciones de codigo intermedio

Imagen
 La generación de código tiene como objetivo generar el ejecutable que después emplearía el usuario. Sin embargo, es habitual que el producto del compilador no sea directamente un fichero ejecutable. Es bastante más común que sea un fichero en lenguaje ensamblador. De esta manera, se evitan problemas como tener que medir el tamaño exacto de las instrucciones o llevar la cuenta de sus direcciones. Además, es muy probable que el código generado tenga referencias a objetos externos como funciones de biblioteca. Estas referencias externas serían resueltas por el enlazador o el cargador. 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 trabajar con ellos. Nosotros nos centraremos en un tipo de código que se parece bastante al lenguaje ensamblador. Existen otros tipos de código intermedio que representan los programas como árboles o grafos. También existen representaciones mixtas que combinan ...

Programa Examen

Imagen
 Polaca Polaca Inversa

Evaluación de polaca y polaca inversa

Imagen
 (8*7+6/3) + (7/3*5-3+6) POST-ORDEN - POLACA INVERSA (87*)63/73/5*3-6++ (8*7)63/73/5*3-6++ (8*7)(6/3)73/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++ (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) ____________________________________________________________________________ Preorden-Polaca:  ++*87/63+-*/73536 ++(8*7)/63+-*/73536 ++(8*7 6/3)+-*/73536 +(8*7+ 6/3)+-*/73536 +(8*7+ 6/3)+-*(7/3)536 +(8*7+ 6/3)+-(7/3*5)36 +(8*7+ 6/3)+(7/3*5-3)6 (8*7+ 6/3)+(7/3*5-3+6)

Pasos del ejercicio

  Pasos del ejercicio

Evaluación de los tres tipos de recorrido

Imagen
  Postorden:3 2 1 6 5 3 3 7 2 4 7 6 Preorden:1 7 3 1 3 2 5 6 4 3 2 7 5 6 8 9 Inorden: 3 1 2 3 5 6 7 3 4 2 7 1 6 6 8 5 9 Postorden: Y A N O G I M A N P O R F A A Preorden: A M N Y A I O G A P A N F O R  Inorden:  Y N A M O I G A A P N A F O R

Notación Polaca(Ejercicios)

Imagen
 (x+2*y)^5/(4*x-3) /^+xx2yy5-*4x3

Ejemplos de Fractales de la naturaleza(Video)

Imagen
Fractales A grandes rasgos, un fractal es un objeto geométrico progresivo que, a partir de un patrón de repetición y escala numérica, reproduce ciertos comportamientos en la naturaleza (y su aparente caos). La voz proviene del latin fractus - "fracturado"-, y el termino fue acuñado, como se entiende hoy, en 1975 por el matemático polaco Benoît Mandelbrot (1924-2010), quien tuvo la claridad para encontrarreglas y patrones en las formas irregulares que habitan el mundo y traducirlo a un lenguaje matemático aplicable. Mandelbrot respondio a un momento matemático en el que el mundo estaba siendo explicado geométricamente a partir de formas idealizadas y volúmenes regulares y lisos (líneas, círculos, conos, esferas) -cuando la realidad es que nuestro mundo es áspero e irregular, pero también repetitivo y progresivo. Pero la idea, el descubrimiento, es mucho más antiguo y proviene de las culturas babilónica y asiria, tocando, por supuesto, a los griegos y latinos, con el descubrimi...

¿Qué es un fractal?

 ¿Qué es un fractal? Un fractal es un objeto geométrico caracterizado por presentar una estructura que se repite a diferentes escalas. En cierto modo, se trata de un patrón sin fin. Así, la Figura 1 muestra un fractal del plano. El término fue propuesto por Benoît Mandelbrot en 1975. Proviene del latín fractus, cuyo significado es quebrado o fracturado. Desgraciadamente, no existe al día de hoy una definición rigurosa de fractal totalmente satisfactoria. Sin embargo, sí pueden enumerarse algunas propiedades que cabe esperar en un fractal: Que sea autosimilar o, al menos, quasi-autosimilar, en el sentido de Sullivan. Por ejemplo, en términos vagos se puede decir que un fractal del plano es una curva que se reproduce a sí misma indefinidamente. Que su dimensión topológica sea estrictamente inferior a su dimensión geométrica (o dimensión de Hausdorff). Así, en el plano podríamos hablar de “curvas” de longitud infinita, a pesar de estar contenidas en un recinto acotado. La estructura f...

Notacion Polanca

Notación polaca (PN), también conocida como notación polaca normal (NPN), La notación Łukasiewicz, la notación de Varsovia, la notación de prefijos en polaco o simplemente la notación de prefijos, es una notación matemática en la que los operadores preceden sus operandos, en contraste con la notación infija más común, en la que los operadores se colocan entre operandos, así como la notación polaca inversa (RPN), en la que los operadores siguen sus operandos. No necesita paréntesis siempre que cada operador tenga un número fijo de operandos. La descripción "Polaco" se refiere a la nacionalidad del lógico Jan Łukasiewicz, quien inventó la notación polaca en 1924. El término notación polaca se toma a veces (como lo contrario de notación infija) para incluir también la notación polaca inversa. Cuando los intérpretes de lenguajes de programación utilizan la notación polaca como sintaxis para expresiones matemáticas, se analiza fácilmente en árboles de sintaxis abstracta y, de hech...

Codigo-Arbol

Imagen