Mostrando entradas con la etiqueta LFP. Mostrar todas las entradas
Mostrando entradas con la etiqueta LFP. Mostrar todas las entradas

domingo, 14 de junio de 2009

Procesadores de Lenguaje

Hoy vamos a tratar un tema importante, ya que nos ayudara a diferenciar a los distintos procesadores de lenguaje, algunos ejemplos de los tipos de procesadores, asi como una pequeña descripcion:


Definicion:
Los procesadores de lenguaje son todos los programas que a través de una entrada escrita en un lenguaje de programación pueden manipular herramientas de software y hardware de un computador. Estos procesadores de lenguaje se dividen en traductores e intérpretes.



Traductor:
Un traductor es un programa que recibe un código fuente y lo traduce a otro código, generalmente a un código objeto, sin perder su funcionamiento.

Interpretes:
Un intérprete es un programa diseñado para ejecutar instrucciones de un código determinado, no genera ningún tipo de código adicional, y es ejecutable.


Exitos!!!!

viernes, 24 de abril de 2009

Algoritmo para pasar un AFD hacer Analizador Lexico

Hoy escribire de como se puede mapear un AFD (Automata Finito Deterministico) hacia un analizador Lexico, les dare el algoritmo basico para esto: 

Primer Paso:

Realizar el método del árbol, con sus expresiones regulares unidas por or “|” para llegar a su AFD

Segundo Paso:

Reglas:

  • Cada estado se convierte en un Case
  • Cada transición se convierte en un If el cual debe estar dentro de un case.
  • En cada estado de aceptación, se agrega un else if para aceptar el lexema.


Tercer Paso:

Variables

Estado: el cual nos indicara en que estado nos encontramos. Es el valor que se utiliza en el switch de comparación.
Índice: nos dice la posición en la cual nos estamos moviendo dentro de nuestro archivo de entrada.
Lexema: será la variable donde estaremos concatenando la información leída del archivo de entrada.
Archivo Entrada: el cual contendrá lo que leamos del archivo de entrada.

Cuarto Paso:

Algoritmo Básico

Inicializar Variables {

  Mientras No sea EOF{

   Incrementamos índice

   Leemos carácter del Archivo de Entrada en la posición índice

    Switch ( estado ) { 
        En caso que sea 1
            Si (carácter es igual a transicion1)
                Cambiar estado
                Lexema se le agrega el nuevo carácter
            Sino Si (carácter es igual a transicion2)
                Cambiar estado
                Lexema se le agrega el nuevo carácter
                ….
            Sino Si (carácter es igual a transiciónN)
                Cambiar estado
                Lexema se le agrega el nuevo carácter
            Sino es ninguna de las anteriores
                Es error lexico
    En caso que sea 2
            Si (carácter es igual a transicion1)
            Sino Si (carácter es igual a transicion2)
            ….
            Sino Si (carácter es igual a transiciónN)
                En caso que sea 3 y este sea un estado aceptación
                Aceptar Lexema asociado a Token
                Reiniciar estado
                Limpiar el Lexema
                Retroceder el indice.

}//Fin Switch

 }//Fin Mientras

}//Fin de Metodo



Espero les sirva este algoritmo, muy pronto estare subiendo ejemplos de como llegar al AFD y de como implementar el analizador lexico en java. 

Exitos!!!! 

miércoles, 18 de marzo de 2009

Compilador Vs Intérprete

Hoy escribire algunas diferencias entre un compilador y un intérprete, las cuales a mi parecer son:

• Un programa compilado puede funcionar por si solo mientras que un código traducido por un intérprete no puede funcionar sin éste.

• Un programa traducido por un intérprete puede ser ejecutado en cualquier máquina ya que, cada vez que se ejecuta el intérprete, tiene que compilarlo.

• Un archivo compilado es mucho más rápido que uno interpretado.

domingo, 1 de marzo de 2009

Lenguajes Formales de Programacion (Intro)

Hoy quiero darles una intro a lo que es Lenguajes Formales de Programacion, dando la definicion y ejemplos del lenguaje Natural, Formal y de Programacion:


Lenguaje Natural

Definición:

Establece comunicación entre los seres humanos, este tipo de lenguajes se dan por enriquecimiento progresivo y continuo (evolución del lenguaje), ya que tiene ambigüedad acepta polisemantica. Una característica es que no puede darse una formalización completa.

En general un lenguaje natural es el que ha evolucionado con el paso del tiempo para fines de la comunicación humana, y continúan su evolución sin tomar en cuenta reglas gramaticales formales, cualquier regla se desarrolla después de que sucede el hecho, en un intento de explicar y no determinar la estructura del lenguaje.

Ejemplo:
Español
Ingles
Alemán
Etc.



Lenguaje Formal

Definición:

Se utiliza para expresar situaciones dentro del área científica. Algunas características que podemos mencionar es que esta perfectamente definido y no puede tener ambigüedades, se desarrolla con teorías preestablecidas y puede llegar a una completa formalización lo que nos permite poderlo construir computacionalmente.

Este lenguaje esta definido por reglas preestablecidas, es decir que primero se determina al lenguaje y no se intenta explicarlo. Gracias al uso de reglas es posible construir traductores computarizados eficientes para los lenguajes de programación a la vez que la falta de estas reglas dificulta la construcción del traductor como lo es el caso del lenguaje natural.

Ejemplo:
Lenguajes de Programación
Lenguajes Matemáticos (Algebra)



Lenguaje de Programación

Definición:

Un lenguaje de programación es una técnica estándar de comunicación que permite expresar las instrucciones que han de ser ejecutadas en una computadora. Consiste en un conjunto de reglas sintácticas y semánticas que definen un lenguaje informático.

Un programa escrito en un lenguaje de programación necesita pasar por un proceso de compilación, es decir, ser traducido al lenguaje de máquina, o ser interpretado para que pueda ser ejecutado por el ordenador. También existen lenguajes de scripting que son ejecutados a través de un intérprete y no necesitan compilación.

Exitos!!!

lunes, 16 de febrero de 2009

Clasificación de Lenguajes de Programación

La clasificacion que propongo es por el nivel de trabajo de los lenguajes de programacion:

Lenguaje máquina
El lenguaje máquina es el único que entiende directamente la computadora, utiliza el alfabeto binario que consta de los dos únicos símbolos 0 y 1, denominados bits (abreviatura inglesa de dígitos binarios). Fue el primer lenguaje utilizado en la programación de computadoras, pero dejó de utilizarse por su dificultad y complicación, siendo sustituido por otros lenguajes más fáciles de aprender y utilizar, que además reducen la posibilidad de cometer errores.

Lenguaje de bajo nivel
Un lenguaje de programación de bajo nivel es el que proporciona poca o ninguna abstracción del microprocesador de un ordenador. Consecuentemente es fácilmente trasladado a lenguaje de máquina.En general se utiliza este tipo de lenguaje para programar controladores (drivers).

La programación en un lenguaje de bajo nivel como el lenguaje de la máquina o el lenguaje simbólico tiene ciertas ventajas: 1. Mayor adaptación al equipo. 2. Posibilidad de obtener la máxima velocidad con mínimo uso de memoria. Pero también tiene importantes inconvenientes: 1. Imposibilidad de escribir código independiente de la máquina. 2. Mayor dificultad en la programación y en la comprensión de los programas. Sus características son: 1. Se trabaja a nivel de Microinstrucciones, es decir, su programación es al más fino detalle. 2. Está orientado a la máquina.

Lenguaje de alto nivel
Los lenguajes de alto nivel logran la independencia del tipo de máquina y se aproximan al lenguaje natural. Se puede decir que el principal problema que presentan los lenguajes de alto nivel es la gran cantidad de ellos que existen actualmente en uso.

Los lenguajes de alto nivel, también denominados lenguajes evolucionados, surgen con posterioridad a los anteriores, con los siguientes objetivos, entre otros:

  • Lograr independencia de la máquina, pudiendo utilizar un mismo programa en diferentes equipos con la única condición de disponer de un programa traductor o compilador.
  • Aproximarse al lenguaje natural, para que el programa se pueda escribir y leer de una forma más sencilla.
  • Incluir rutinas de uso frecuente como son las de entrada/salida, funciones matemáticas, manejo de tablas, etc, que figuran en una especie de librería del lenguaje, de tal manera que se pueden utilizar siempre que se quieran sin necesidad de programarlas cada vez.

Se puede decir que el principal problema que presentan los lenguajes de alto nivel es la gran cantidad de ellos que existen actualmente en uso (FORTRAN, LISP, ALGOL, COBOL, APL, SNOBOL, PROLOG, MODULA2, ALGOL68, PASCAL, SIMULA67, ADA, C++, LIS, EUCLID, BASIC), además de las diferentes versiones o dialectos que se han desarrollado de algunos de ellos.

jueves, 12 de febrero de 2009

Token vs Lexema

A veces resulta dificil diferenciar lo que es Token de la palabra Lexema, y es q en algunos casos nos los llegan a enseñar como que son sinonimos, pero no lo son.

Token: también llamado componente léxico es una cadena de caracteres que tiene un significado coherente en cierto lenguaje de programación.

Lexema: cadena de caracteres que concuerda con un patron que describe un componente lexico.

Entonces cual es la diferencia ¿¿??

El componente lexico, en nuestro caso token es el patron que deben de seguir los caracteres, luego una vez que la secuencia de caracteres es aceptada a ella la llamamos lexema

Cabe mencionar que un token puede tener tener uno o infinitos lexemas, esto es si el token es palabra reservada o no, si el token es palabra reservada, entonces solo tendra un lexema (ej if, do), pero si no es palabra reservada, tendra muchos lexemas (ej identificador, numero)que puedan cumplir con la secuencia.

Espero ejemplificarles mejor esto con esta tabla:




Exitos!!!