Archivo

Archive for the ‘Compiladores’ Category

Historia del Programador

mayo 14, 2008 2 comentarios

1. Al principio Dios creo el Bit y el Byte. Y de ellos creo la Palabra.
2. Y hubo dos bytes en una palabra; y nada mas existía. Y Dios separo el Uno del Cero; y vio que esto era bueno.
3. Y Dios dijo: – Hágase el Dato.
Y así sucedió.
Y Dios dijo: – Que los Datos vayan a su correspondiente lugar.
Y creo los disquetes, discos duros y los compactos.
4. Y dijo Dios: – Háganse los computadores, así habrá lugar para poner los disquetes, discos duros y compactos.
Y Dios creo los computadores y los llamó Hardware.
5. Y no había Software aun. Pero Dios creo programas, chicos y grandes…
Y les dijo: – Vayan y multiplíquense por si mismos y llenen toda la Memoria.
6. Y dijo Dios: – Creare al Programador; y el Programador hará nuevos programas y gobernara sobre los computadores, programas y datos.
7. Y Dios creo al Programador y lo puso en el Centro de Datos.
Y Dios le mostró al Programador el Árbol de Directorios y le dijo: – Puedes usar todos los volúmenes y subvolumenes, pero ¡NO USES! Windows.
8. Y Dios dijo: – No es bueno para el Programador estar solo.
Y tomo un hueso del cuerpo del Programador y creo una criatura que buscaría al Programador, lo admiraría y amaría las cosas que hiciera el Programador; Y Dios llamo a la criatura EL USUARIO.
9. Y el Programador y el Usuario fueron dejados por EL solos bajo el DOS desnudo y fue bueno.
10. Pero Bill fue mas listo que todas las otras criaturas de Dios.
Y Bill le dijo al Usuario: – ¿Realmente Dios te dijo que no ejecutaras ningún programa?
11. Y respondió el Usuario. – Dios nos dijo que podíamos usar cualquier programa y cualquier dato pero nos dijo que no ejecutáramos Windows o moriríamos.
12. Y Bill dijo al Usuario – ¿Cómo puedes hablar sobre algo que no has probado? En el momento que corras Windows te convertirás en igual a Dios. Podrás crear cualquier cosa que desees con un simple clic del ratón?
13. Y el Usuario vio que los frutos del Windows eran buenos y fáciles de usar. Y el Usuario vio que cualquier conocimiento era inútil, pues Windows podía reemplazarlos.
14. Así que el Usuario instalo Windows en su computador y le dijo al Programador que era bueno.
15. Y el Programador empezó a buscar nuevos drivers.
Y Dios le pregunto: – ¿Qué buscas?
Y el Programador respondió: – Busco nuevos drivers porque no puedo hallarlos en el DOS.
Y Dios dijo: – ¿Quien te dijo que necesitabas drivers? ¿Ejecutaste Windows?
Y el Programador dijo: – ¡Fue Bill quien nos lo dijo!
16. Y Dios dijo a Bill: – Por lo que hiciste serás odiado por todas las criaturas.
Y el Usuario estará siempre descontento contigo.
Y siempre venderás Windows.
17. Y Dios dijo al Usuario – Por lo que hiciste Windows te decepcionara y se comerá todos tus recursos.
Y tendrás que usar programas piojosos.
Y siempre confiaras en la ayuda del Programador.
18. Y Dios dijo al Programador: – Porque oíste al Usuario nunca serás feliz. Todos tus programas tendrán errores y tendrás que arreglarlos hasta el fin de los tiempos.
19. Y Dios los echo del Centro de Datos y cerro la puerta y la aseguró con un password.
20. FALLA DE PROTECCION GENERAL – Apriete Ctrl-Alt-Del

Categorías: Compiladores

Compactación de Tablas

noviembre 30, 2007 1 comentario

Compactar la tabla de simbolos o tabla de transiciones, significa que llegaremos a la construcción de 2 tablas adicionales que no contiene desperdicios de memoria producto de todas las casillas que catalogadas como error en el análisis léxico.

Basado en la tabla de símbolos que hemos utilzado en el post Análisis Léxico, procederé a la construcción de las tablas compactas.

image La primera tabla se construye de la siguiente manera:

c1: Son los estados del automata

c2: La primera fila inicia con 1, luego es el resultado de sumar c1 y c2

c3: Es un número que equivale a suma de los elementos que no son error en la tabla de tranciiones en el estado c1 correspondiente.

image La tabla 2 contiene

c1: Números secuenciales

c2: Consiste en la enumeración de todos los elementos que no son error basados en la tabla de transiciones

c3: Es el numero de columna correspondiente el elemento c2 en la tabla de transiciones

Para reconocer una cadena con estas tablas lo que se hace es lo siguiente:

Asumamos que se quiere reconocer el if(

  • 1. Pasamos a número de columna cada caracter de acuerdo a la tabla de transiciones de lo que nos quedaria 125 que es equivalente a if(
  • La c2 de la tabla 1 nos indica a que fila vamos en la tabla 2, en este caso nos envia a la tabla 2 en la fila 1 con 6 posibilidades de comparación
  • Comparamos es caracter de entrada que es el 1 con el c3 de la tabla 2, en este caso son iguales
  • La c2 de la tabla 2 nos indica a que fila vamos en la tabla 1, en este caso nos envia a la fila 1.
  • Continuando c2 =7 y nos vamos a la fila 7 de la tabla 2……

Cuando encontramos un número negativo(token) es por que la cadena que estamos trabajando ha sido reconocida sin problemas.

Estas tablas se utilizan para la programación del analizador sintáctico.

Categorías: Compiladores

Análisis Léxico

octubre 31, 2007 9 comentarios

El analizador léxico, también conocido como scanner, lee los caracteres uno a uno desde la entrada y va formando grupos de caracteres con alguna relación entre sí (tokens), que constituirán la entrada para la siguiente etapa del compilador. Cada token representa una secuencia de caracteres que son tratados como una única entidad.

Un Analizador Léxico (o analizador lineal) transforma la secuencia de símbolos de entrada en una secuencia de componentes (símbolos) léxicos sobre la cual es mas fácil hacer luego el análisis sintáctico. El A.L. lee caracteres de entrada y los agrupa en secuencias que tienen significado dentro de la estructura sintáctico del lenguaje fuente.

Un analizador léxico es un traductor que actúa en la primera fase de un proceso de compilación.

Para iniciar en la construcción de un analizador léxico o primero que realizamos es:

1. Definición de todas las palabras reservadas o también lo llamamos lenguaje, a esto le agregamos todos los caracteres separadores, es decir el caracter inmediato que puede existir luego de esta palabra por ejemplo si tengo el lenguaje:

L= { if, (, ), for }, estas palabras reservadas de C++.

if, sus separadores serán: espacio, (, tabulador, enter

(, sus separadores son muchos: identificadores, numeros, (, espacio, tabulador, etc..

esto se debe hacer con cada una de las palabras reservadas.

2. Construcción del autómata en base a las palabras reservadas:

El número negativo colocado a final, es el token, es decir lo que me va a dar como resultado el léxico al reconocer una palabra, esto puede ser un conjunto de caracteres o número negativos.

3. Construcción de la tabla de transiciones

Esta tabla representa el movimiento del autómata, y ya se puede hacer implementación para reconocer las palabras. Si embargo es necesario realizar un proceso de compactación de tablas.

Espero sus comentarios

Categorías: Compiladores

El libro del dragon

octubre 25, 2007 3 comentarios

Les hago referencia a un post que me parece curioso e interesante, y bueno me enteré que existe una nueva versión del famoso libro de compiladores, al que «TENEMOS MIEDO»

http://javieraroche.com/2007/02/20/el-libro-del-dr…

Y bueno un complemento obtenido del mismo blog, y que todos los que han usado este libro lo entenderán.

Java – Llega, encuentra al dragón, desarrolla un framework para aniquilación de tragones en múltiples capas, escribe varios artículos sobre el framework… pero no mata al dragón.

.NET – Llega, ve la idea del desarrollador de Java y la copia, intenta matar al dragón, pero el bicho se lo come

C – Llega, mira al dragón con mirada de desprecio, tira de espada, degolla al dragón, encuentra a la princesa… y la ignora para ver los últimos checkins del cvs del kernel de linux

C++ – Crea un pincho básico y va juntando funcionalidades hasta tener una espada compleja que apenas consigue entender… mata al dragón pero se atasca en medio del puente por culpa de pérdidas de memoria (memory leaks)

COBOL – Llega, ve al dragón y piensa que es demasiado viejo para conseguir matar un bicho de ese tamaño y quedarse con la princesa, y entonces se va.

Pascal – Se prepara durante 10 años para crear un sistema de aniquilación de dragones… cuando llega el momento descubre que el programa sólo acepta lagartijas como entrada

VB – Monta un arma de destrucción de dragones a partir de varios componentes, salta encima del lomo del dragón, y en la hora H descubre que la espada sólo funciona durante las noches de lluvia…

PL/SQL – Recoge datos de otros matadores de dragones, crea tablas con n relaciones de complejidad ternaria, datos en tres dimensiones, OLAP, tarda quince años para procesar la información… y para entonces la princesa se volvió lesbiana.

Ruby – Llega con muchísima fama, diciendo que es el mejor en hacer cualquier cosa y cuando va a enfrentarse al dragón muestra una peliculita en la que él mismo aparece matando a un dragón… el dragón se lo come de puro aburrimiento

Smalltalk – Llega, analiza al dragón y a la princesa, se da la vuelta y se pira: ellos son muy inferiores

shell – Crea un arma poderosa para matar dragones, pero en la hora H no recuerda como usarla

shell(2)– El tío se acerca al dragón con un script de dos líneas que mata, corta, destripa, empala, pica en pedacitos y empaca al bicho, pero a la hora de ejecutarlo el script aumenta, engorda, enfurece y pone alcohol en el fuego del dragón.

Ensamblador – Cree que está haciendo lo más correcto y eficiente… pero pone un A en lugar de un D y mata a la princesa para terminar follándose al dragón

Fortran – Llega y desarrolla una solución con 45 mil líneas de código, mata al dragón, va al encuentro de la princesa… pero ella le llama tirillas y se va corriendo detrás del programador de java que era elegante y además es rico

FOX PRO – Desarrolla un sistema para matar al dragón. Por fuera es precioso y funciona, pero por dentro está todo parcheado y cuando va a ejecutar el aniquilador de dragones recuerda que olvidó indexar los DBF.

ANALISTA DE PROCESOS – Se acerca al dragón con dos toneladas de documentación desarrollada sobre el proceso de matar un dragón genérico, desarrolla un DFD para liberar a la princesa y casarse con ella, convence al dragón de que es lo mejor para el y que no va a doler. Al ejecutar el proceso estima el esfuerzo y el tamaño del daño que causará con la firma del papa, de Buda y de Joan Manuel Serrat para el plano, y entonces compra dos bombas nucleares, 45 cañones, un portaaviones y contrata a 300 hombres armados hasta los dientes… cuando en realidad tan sólo necesitaría la espada que tenía en la mano desde el principio

CLIPPER: Monta una rutina que carga un array de codeblocks para insultar al dragón, cantarle a la princesa, cargar la espada a memoria, moler al dragón, limpiar la suciedad, preparar un vaso de leche condensada con moras para la princesa, follar a la princesa, darse un baño, encender el coche, ponerle gasolina y volver para casa. A la hora de ejecutar recibe un “Bound Error: Array Access” y el dragón se lo come con patatas.

Categorías: Compiladores

Primeros y Siguientes

octubre 12, 2007 4 comentarios

Como se sufre con estos temas

Primeros._ Conjunto de elementos terminales que se encuentran al lado derecho de la producción. Para lo cual se tiene la tres siguientes formulas. Su palabra lo dice es el primer elemento terminal que encontramos en el lado derecho de la producción

Siguientes._ Si A es un símbolo no Terminal de la gramática; S(A) es el conjunto de terminales ( y $) que pueden aparecer a continuación de A alguna forma sentencial derivada del símbolo inicial.

Cualquier comentario, ayuda sugerencia no duden en escribir

Categorías: Compiladores

Factorización por la Izquierda

septiembre 6, 2007 2 comentarios

Una gramática tiene dos producciones alternativas de un símbolo A empiezan iguales, no se sabrá por cuál de ellas seguir. Se trata de reescribir las producciones de A para retrasar la decisión hasta haber visto lo suficiente de la entrada como para elegir la opción correcta.

Ejemplo de una gramática que tiene Factorización por la izquierda

Para eliminar la Factorización se debe poner en practica la siguiente formula:

Ejemplo:

 

Resutado de factorizar

Se realiza factorización ya que si no lo hacemos al momento de que el análisis sintáctico inicia el reconocimiento se va a encontrar con varias alternativas, lo que hace que esto sea semejante a un automata finito no determinista, por lo tanto no se sabe que camino elegir.

Categorías: Compiladores

Análisis Sintáctico Descendente LL(1)

septiembre 5, 2007 3 comentarios

Voy a continuar con los temas y en esta ocasión trabajaremos el análisis LL(1) 

Es del tipo LL1 porque empezamos a derivando por la izquierda, y los carácteres son leidos de izquierda a derecha, el 1 por que se lee 1 solo elemento de entrada.

También se puede considerar como un intento de construir un árbol de análisis sintáctico para la entrada comenzando desde la raíz y creando los nodos del árbol en orden previa.

Bueno primeramente para trabajar el análisis sintáctico descendente se debe realizar primeramente algunas operaciones para que la gramática sea LL1 las cuales son:

– Eliminar Ambiguedad

– Eliminar Recursividad por la Izquierda

– Factorizar

– Primeros y siguientes

  • Ambigüedad

Una gramática es ambigua cuando genera más de un árbol de derivación.

Para eliminar la ambigüedad se debe reescribir la gramática.

Ejemplo:

  • Recursividad por la Izquierda

Una gramática es recursiva por la izquierda si tiene un no Terminal A tal que existe una derivación A->Aα para alguna cadena . Es decir por simple observación podemos identificar.

Para eliminar la recursividad por la izquierda se utiliza la siguiente formula.

Ejemplo:

Gramática Recursiva

En el siguiente aporte veremos la factorización.

Categorías: Compiladores

Que opina los estudiantes del Análisis Sintáctico

septiembre 5, 2007 Deja un comentario

Realmente me parecio muy curioso al buscar en YouTube videos sobre análisis sintáctico y lo que pude encontrar fue esto que les comparto

Les invito a que realmente podamos cambiar de opinión, y cualquier aporte sobre el tema estaré muy gustoso de ayudar

Categorías: Compiladores

Análisis Sintáctico

mayo 18, 2007 2 comentarios

En el análisis sintactico como lo habia mensionado de realiza la verficiación de estructura, para trabajar con este análisis debemos conocer lo que es una gramática y como se la elabora.

Vamos a ver dos tipos de análisis:

  • Descendente (LL)
  • Ascendente (SLR)

Este análisis inicia en desde la raiz hasta las hojas por eso se lo llama descendente, es decir partimos desde el símbolo inicial de la gramática hasta llegar a derivar la expresión o reconocerla.
Leer más…

Categorías: Compiladores

Fases de un Compilador

abril 10, 2007 8 comentarios

Las fases de un compilador son:

Análisis Léxico: Esta fase se encarga de verificar si todas las cadenas pertenecen o no al lenguaje. Es decir realiza un análisis símbolo por símbolo indicando el token por cada uno de los elementos reconocidos o el error en caso de no reconocer. Este análisis no logra detectar muchos errores por su característica.

Ejemplo:

total=valor*5

Luego del análisis léxico:

id = id * num
Leer más…

Categorías: Compiladores
Diseña un sitio como este con WordPress.com
Comenzar