Entradas

Mostrando 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 e...

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 órdenes,...

2.3.4 Instrucciones de control.

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

2.3.3 Instrucción de asignación.

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

2.3.2 Expresiones.

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

2.3.1 Variable y constantes.

Imagen
• Una constante es un dato numérico o alfanumérico que no cambia durante la ejecución del programa. Ejemplo: pi = 3.1416 • 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. Ejemplo: area=pi*radio^2 Las variables son: el radio, el area y la constate es pi • Las declaraciones de variables y constantes deben separarse de tal manera que queden las expresiones una por una de manera simple.  

2.3 Esquema de generación.

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

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
  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, pero ellos dependen de su...

2.2.2 Código P

Imagen
 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 diverso 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 datos no específica p...

2.2 Representaciones de código 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 gra...

Programa de Polaca inversa y polaca

Imagen
 

Evalucion de polaca y polaca inverza

Imagen
 Ejercicio: (8*7+6/3) + (7/3*5-3+6) 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) 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)

Notacion polaca

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

Ejercicio de notacion polaca y polaca inversa

 https://app.box.com/s/xx0si6gd7bdxtyx5euk57fv7oen7uqbz

Definicion de notacion polaca

What Does Polish Notation (PN) Mean? Polish notation is a notation form for expressing arithmetic, logic and algebraic equations. Its most basic distinguishing feature is that operators are placed on the left of their operands. If the operator has a defined fixed number of operands, the syntax does not require brackets or parenthesis to lessen ambiguity. Polish notation is also known as prefix notation, prefix Polish notation, normal Polish notation, Warsaw notation and Lukasiewicz notation. Techopedia Explains Polish Notation (PN) Polish notation was invented in 1924 by Jan Lukasiewicz, a Polish logician and philosopher, in order to simplify sentential logic. The idea is simply to have a parenthesis-free notation that makes each equation shorter and easier to parse in terms of defining the evaluation priority of the operators. Example: Infix notation with parenthesis: (3 + 2) * (5 – 1) Polish notation: * + 3 2 – 5 1 When used as the syntax for programming language interpreters, Polish...

Notacion Polaca

 https://app.box.com/s/6f41dwmwc6w0a3wjpjprulvs5eg3irhv

Evaluacion de los 3 tipos de recorridos

Imagen
 Ejercicio 1:  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 Ejercicio 2:  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

Ejercicios de notacion polaca

Imagen
 Ejercicio 1: (x+2*y)^5 (4*x-3) Preorden: /^+x*2y5-*4x3

¿Que es Fractal?

Imagen
¿Que es fractal? Un fractal es una figura, que puede ser espacial o plana, formada por componentes infinitos. Su principal característica es que su apariencia y la manera en que se distribuye estadísticamente no varía aun cuando se modifique la escala empleada en la observación.  Un fractal es un conjunto matemático que puede gozar de autosimilitud a cualquier escala, su dimensión no es entera o si es entera no es un entero normal. El hecho que goce de autosimilitud significa que el objeto fractal no depende del observador para ser en sí, es decir, si tomamos algunos tipos de fractales podemos comprobar que al hacer un aumento doble el dibujo es exactamente igual a la inicial, si hacemos un aumento 1000 comprobaremos la misma característica, así pues, si hacemos un aumento n, el dibujo resulta igual luego las partes se parecen al todo. Un conjunto u objeto es considerado fractal cuando su tamaño se hace arbitrariamente mayor a medida que la escala del instrumento de medida dismin...

Programa de inorden, postorden, preorden

Imagen
  package arbol; public class Arbol { private Nodo raiz;         private String cad="";         private int cont=0;          public Arbol(String dato) { raiz=new Nodo(dato); raiz.setIzquierda(null); raiz.setDerecha(null); } public void insertarIzquierda(String dato, Nodo ref) { if(ref!=null) { Nodo nuevo=new Nodo(dato); ref.setIzquierda(nuevo); } } public void insertarDerecha(String dato, Nodo ref) { if(ref!=null) { Nodo nuevo=new Nodo(dato); ref.setDerecha(nuevo); } } public String preOrden(Nodo ref) { if(ref!=null) {                         if(ref==raiz){                             cad="";                         }               ...