Friday, October 05, 2007

ANÁLISIS LÉXICO

Diagrama de transiciones para reconocer expresiones aritméticas de longitud arbitraria que comprenden reales positivos separados por signos de suma, resta, multiplicación, división o potenciación.





+,-,*,/,^ = operación
+,- = signo
digito = 0 a 9

Analizador léxico en lenguaje C a partir del diagrama de transiciones anterior


/***********************************************************************************
WALDO CHARRIS FONTALVO
ing.waldichar@gmail.com
UNIVERSIDAD DEL MAGDALENA
************************************************************************************/ #include<iostream.h>
#include<conio.h>
#include<stdio.h>

main (){

clrscr();
int estado =1;
char sb;
cout<<endl<<"digite una expresion aritmetica"<<endl<<endl<<endl;

do{
sb=getchar();
switch(estado){
case1:

if(sb=='0' sb=='1' sb=='2'sb=='3'sb=='4'sb=='5'sb=='6'
sb=='7'sb=='8'sb=='9')
estado=2;
else if(sb!='\n')
estado=8;
break;
case 2:
if(sb=='0'sb=='1'sb=='2'sb=='3'sb=='4'sb=='5'sb=='6'
sb=='7'sb=='8'sb=='9')
estado=2;
else if(sb=='.')
estado=3;
else if(sb=='e'sb=='E')
estado=5;
else if(sb=='+'sb=='-'sb=='*'sb=='/')
estado=1;
else if(sb!='\n')
estado=8;
break;
case 3:
if(sb=='0'sb=='1'sb=='2'sb=='3'sb=='4'sb=='5'sb=='6'
sb=='7'sb=='8'sb=='9')
estado=4;
else if(sb!='\n')
estado=8;
break;
case 4:
if(sb=='0'sb=='1'sb=='2'sb=='3'sb=='4'sb=='5'sb=='6'
sb=='7'sb=='8'sb=='9')
estado=4;
else if(sb=='e'sb=='E')
estado=5;
else if(sb=='+'sb=='-'sb=='*'sb=='/')
estado=1;
else if(sb!='\n')
estado=8;
break;
case 5:
if(sb=='0'sb=='1'sb=='2'sb=='3'sb=='4'sb=='5'sb=='6'
sb=='7'sb=='8'sb=='9')
estado=7;
else if(sb=='+'sb=='-')
estado=6;

else if(sb!='\n')
estado=8;
break;
case 6:
if(sb=='0'sb=='1'sb=='2'sb=='3'sb=='4'sb=='5'sb=='6'
sb=='7'sb=='8'sb=='9')
estado=7;
else if(sb!='\n')

estado=8;
break;
case 7:
if(sb=='0'sb=='1'sb=='2'sb=='3'sb=='4'sb=='5'sb=='6'
sb=='7'sb=='8'sb=='9')
estado=7;
else if(sb=='+'sb=='-'sb=='*'sb=='/')
estado=1;
else if(sb!='\n')
estado=8;
break;
}
}while(sb!='\n');
if(estado==2estado==4estado==7)
cout<<endl<<endl<<"la expresion es aceptada";
else
cout<<endl<<endl<<"la expresion no es aceptada";
getch();
}

}








Tabla de transiciones a partir del diagrama anterior





fdc = fin de cadena
error = 0
aceptar = 8






Analizador léxico en lenguaje C basado en la tabla transiciones

/***********************************************************************************

WALDO CHARRIS FONTALVO


UNIVERSIDAD DEL MAGDALENA

************************************************************************************/


#include<iostream.h>
#include<conio.h>
#include<stdio.h>

#define digito 1
#define operacion 2
#define punto 3
#define signo 4
#define E 5
#define fdc 6
#define error 0
#define aceptar 8

int mtrans[8][7]={0};

void initmtrans(){
mtrans[1][1]=2;
mtrans[2][1]=2;
mtrans[2][2]=1;
mtrans[2][3]=3;
mtrans[2][5]=5;
mtrans[2][6]=8;
mtrans[3][1]=4;
mtrans[4][1]=4;
mtrans[4][2]=1;
mtrans[4][5]=5;
mtrans[4][6]=8;
mtrans[5][1]=7;
mtrans[5][4]=6;
mtrans[6][1]=7;
mtrans[7][1]=7;
mtrans[7][2]=1;
mtrans[7][6]=8;
};

int transicion (int estado , int entrada){
return mtrans[estado][entrada];
};


main () {
clrscr();
int estado=1;
char sb;
initmtrans();
int entrada;
cout<<endl<<"digite una expresion aritmetica"<<endl<<endl<<endl;
do{
sb=getchar();
switch(sb){
case '0':case '1':case '2':case '3':
case '4':case '5':case '6':case '7':
case '8':case '9':
entrada = digito;
break;
case '+':case '-':
entrada = signo;
if(estado==2estado==4estado==7)
entrada = operacion;
break;
case'*':case'/':case '^':
entrada = operacion;
break;
case '.':
entrada = punto;
break;
case 'e':case'E':
entrada = E;
break;
case '\n':
entrada = fdc;
break;
default:
estado=1;
entrada = punto;
break;
}
estado=transicion(estado,entrada);
}while(estado!=aceptar&&estado!=error);
if(estado==8)
cout<<endl<<endl<<"la expresion es aceptada";
else
cout<<endl<<endl<<"la expresion no es aceptada";
getch();
}



Gramática regular que genera expresiones aritméticas de longitud arbitraria que comprenden reales positivos separados por signos de suma, resta, multiplicación, división o potenciación.


<A>
--> digito <B>
<B> --> digito <B>
<B>
--> operación <A>
<B>
--> punto <C>
<B>
--> E <E>
<B>
--> λ
<C> --> digito <D>
<D>
--> digito <D>
<D>
--> operación <A>
<D>
--> E <E>
<D>
--> λ
<E> --> digito <G>
<E>
--> signo <F>
<F>
--> digito <G>
<G> --> digito <G>
<G> --> operación <A>
<G> --> λ

Sunday, September 30, 2007

Instalación de MPI

Instalación:
(Usando Ubuntu y Kubuntu, o sea, el grosero de debian)

Requisitos :
  1. gcc Instalado.
Como se Instala gcc?
>sudo apt-get install gcc

Si a linux le da la (...) gana de dejarte instalarlo pues bien, sino te jodiste :D, por eso soy un Win-adicto (MPI esta disponible para Windows).
Si te jodiste, prueba descargando una version comprimida, la descomprimes y usas los siguientes comandos.
> ./configure
>Make
(Es medianamente demorado)
Instalar MPI

Thursday, September 27, 2007

Nueva adquisicion del grupo.

Esta disponible para todos los miembros del grupo el texto.
Teoria de Automatas y lenguajes Formales
Dean Kelley

Monday, September 24, 2007

De la entropía a la homeostasis.

Hace un par de minutos caminaba en dirección al trabajo y tropecé, la homeostasis de mi cuerpo me forzó a no caer, y pensé : ¿Es posible modelar el equilibrio mediante un autómata?, mi idea particular fue relacionar el equilibrio a la homeostasis; De la forma natural en que un cuerpo busca regenerarse o equilibrar sus propios centros, un resorte busca su punto muerto mediante oscilaciones senoidales que se atenúan con el tiempo. Posiblemente un sistema donde todos los subsistemas estén equilibrados y busquen un equilibrio debería basarse en reglas senoidales, que exploren subiendo y bajando sobre un punto de equilibrio hasta localizarlo, la búsqueda de ese punto de equilibrio requiere de un fuerte componente entrópico, miremos el caso del resorte que se detiene, el resorte se detiene por que la energía de subida o bajada es disipada o perdida mediante el rozamiento de un agente externo, no nos interesa el origen de la perdida de energía, nos interesa mas bien, que debido a esa perdida energía, el sistema en función del tiempo tiende a equilibrarse. Finalmente logro inferir efímeramente que esa entropía conduce el equilibrio.

Recuerdo cuando en clases del profesor Jorge Ortiz, un autor cuyo nombre no recuerdo, señalaba que “eso” se encontraba entre el caos y el orden.

“eso”, palabra intraducible, inefable, incolora, inodora, insabora, transparente inclusive incompresible.

Wednesday, August 08, 2007

Miembros de Talf Colombia.

Misión:
Formar profesionales en la investigación, profesionales dedicados a la investigación teórica y practica orientada al diseño de compiladores y la teoría de autómatas y lenguajes formales (teoría de la Computación).

Visión:
  • Ser el mejor grupo latinoamericano dedicado al estudio de teoría de autómatas y lenguajes Formales.

  • Liderar los procesos de Investigación Colombiano en dichas áreas.
Valores Institucionales:
  • Responsabilidad.
  • Respeto.
  • Creatividad.
  • Perseverancia.

Presidente:
No hay, es un parlamento formado por los miembros.

Representante:
Meritócratamente, el que maneje mas destrezas en TALF.


Fabio Andrés Palmieri.
(Talento humano, TALF Amateur, Accionista)

Ing. Eduardo Sarmiento Corredor.
(Par evaluador,TALF Professional )

Waldo Charris.
(Por definir, TALF Amateur)

Forma 1 de reversibilidad contextual, con memoria emergente

Como le comentaba a ESC:

Sea M una MEF.
A = alfabeto
a cada letra del alfabeto A.

S unespacio
s un estado del espacio S.


Se define T como = ( a(i) x a(j) x s(i) x s(j) )
hace 35 segs definía T como = ( a(i) x a(j) x s(i) )

Sea T(k) una conjuneto de k Tabla:

recordemos que a puede estar representada por:
se a un conjunto ordenado de simbolos: {f1, f2 , f3 }
f es un sub-fonema
y a es un fonema.

Tuesday, July 17, 2007

TALF Colombia

Estan las Inscripciones abiertas para ser Miembros de TALF Colombia.

MEF Posiblemente Reversibles.

Hablé con ESC.
Y Que riamos hacer una MEF que se Interprete de derecha a Izquierda dejando el rastro
(a/1 a/1 a/1 b/2) y el problema es cual es la tabla de tranciciones Inversas que genere (b/2 a/1 a/1 a/1 ).

la pregunta de Investigación es: ¿ Cual debe ser la Transformación matricial en T (Donde T es la tabla de tranciciones bidimencional de N estados por Z Entradas) Para una M.E.F Mono-Dimiencional apartir de T' (Donde T' es la matriz Transformada) que Genere de una M.E.F A una M.E.F Estrictamente A' ?

Prueba de Hipótesis:
los algoritmos genéticos podrían ayudar a generar dicha Transformación?

Recordar que una M-MEF. (Mono Maquina de estados finitos) es una MEF en una dimención .

Wednesday, July 11, 2007

MEF en R^N COn cabezotes multiples sin reversibilidad.

Estoy trabajando en:
Con tres estados
dos símbolos de alfabeto.
dos Cabezas.
y brincos entres las tres dimensiones que se forma en el cubo de dimensiones (3x2x2).
Esta MEF No es Paralela.

Saturday, July 07, 2007

FExporter : generar scripts en archivos de texto plano

Los archivos CSV (Coma separated values) son archivos separados por tabulaciones o delimitados por comas, Estos archivos manejan una estructura ideal para trabajar en bash con MySql.

FExporter permite hacerlo.

Sintáxsis.

Texto ->
(( letra+ ) |
( @(n , Donde n = 1,100) ) |
<#>
)+



Secuenacias en MySQL

Hago aqui un documento donde se describe detalladamente como crear secuencias en MySql
Oracle si tiene secuencias MySql no las tiene

Si el sistema es altamente concurrido esta secuencia no es muy buena.

De hecho esta secuecnai no maneja concurrencia.

Me desencanto que MySql no tuviese recursión, no obstante saber algo de Automatas y maquinas Turing hizo que las re implementara de la forma.

Como dice Eduardo, eso es un tramullo;fabio tramullero


A -> aB
B -> a
B -> A

Sunday, June 10, 2007

Une ruler

Este es la aplicacion de One ruler que me pidio el favor Guillermo Otero publicése en la Web.

Click aqui para descargarla.

Esta hecho en java y es estático.

Friday, June 01, 2007

Listas ligadas en C Objeto

#include <>
#include <>

class Nodo {
public: Nodo * next;
public: char letra;

public: void Create(void){
this->letra = letra;
this->next = 0;
}
public: Nodo(char letra){
this->letra = letra;
this->next = 0;
}

public: Nodo(void){
this->letra = '\0';
this->next = 0;
}

public: void add(char letra ){
add( new Nodo(letra) );
}

public: void add(Nodo * ejemplo){
if (this->letra=='\0') {
this->letra = ejemplo->letra;
this->next = ejemplo->next;
return;
}

if(this->next==0){
this->next = ejemplo;
} else {
//recursion tipo 2
this->next->add(ejemplo);
}
}

public: Nodo* operator=(char letra){
this->letra = letra;
this->next = '\0';
return this;
}

};


int main(int cargs , char * args[]) {
clrscr();
Nodo * head = new Nodo();
head->add( 'f' );
head->add( 'a' );
head->add( 'b' );
head->add( new Nodo('i') );
head->add( new Nodo('o') );
Nodo *tmp = head;

Nodo * heap = new Nodo();
heap->add(' ');
heap->add('1');
heap->add('9');
heap->add('8');
heap->add('5');

head->add(heap);

while(tmp!=0 ){
cout<<"->"<letra;
tmp = tmp->next;
}

getch();
return 0;
}

Wednesday, April 04, 2007

MEF's Con cinta multidimencionales y tablas de tranciones paralelas.

Del anterior post emerge la duda.

¿Cintas multi-dimencionales con una infinidad de futuros y pasados.?

Ayer después de filosofar y relacionar el concepto de máquina perfecta a una máquina de estados perfecta y una máquina reversible, al igual que un proceso termodinámico reversible existiría una MEFR (Máquina de estados finitos reversibles) si la entropía del sistema fuera cero. ( Este concepto no los enseño J. Ortiz cuando vimos reversibilidad de Autómatas celulares) Esa vaina es Fregada con J*.

Pero es mas jodido cuando las máquinas son multi-cinta. Es el mismo concepto, más bien es como un recuerdo orientado a estados.

Me está haciendo perder cordura y de pronto vida social eso de las máquinas de estados.

Fregada con j*, Barranquillero relativo a algo Jodido(a).

Tuesday, April 03, 2007

Maquinas de estado Reversibles.

Ayer comentaba con Henrry Goméz Rocha y Pavajeau Acerca de maquinas reversibles y pues bueno Es posible hacer maquinas con cintas multidimensionales, asimismo hacer varias tablas de tranciciones para las MEF's.
Mi propuesta a futuro es la siguiente:
La maquina Reversible Consta de:
1) Tener un conjunto de estados llamados S.
2) Un alfabeto permisible Z.
3) Una cinta llamada Expression soportada sobre el alfabeto Z.
4) Un tabla de tranciciones Puntero que sugiera el incremento estadual* posiblemente binario . (A y A')
5) Una tabla de tranciciones A Con S1 que es un Subconjunto de S que se se activan a partir del siguiente elemento de la cinta el cual es referenciado por Puntero.
6) Una tabla de tranciciones A' Con S2 que es un Subconjunto de S que se se activan a partir del siguiente elemento de la cinta el cual es referenciado por Puntero.
7) S* que es un subconjunto de estados especiales.
Resultados: Si una imagen sobre el alfabeto Z es tomada es posible obtener el pasado y el futuro de esa imagen segun una Maquina Reversible Mr donde A es el Espacio de estados siguientes y A' es el espacio de estados Anterior.
Sugerencia para mi mismo: El uso de Matrices transpuestas podria ayudame a hacer el calculo de reversibilidad sin tener que guardar memoria adicional.
*estadual: (de la Rais F-etimologica esta-dual???) relativo a los estados: Angela Nakamura solía decir estadual porque ella es de Brasil y ese termino portugues suena bonito en mi lengua nativa.

Wednesday, March 28, 2007

Out Contex Exception...

Sé que este espacio es para mi como profesional y no para mi como persona... por fuerzas mayores he cerrado mi blog y quiero hacer un suspiro...
Ayer cuando Salí con Diana despues de varios intentos fallidos y gracias a un empujon de la vida... (Ella es una niña hermosisima~ del Valle del Cuaca y trabaja en INVEMAR : Mujer Linda y preparada es como un buen vino y una buena noche...) le dije que estaba desorrollando un lenguajes sin palabras, y ella añadió "Un lenguaje vacio? mudo? ... el lenguaje de las miradas?" Y cuando dijo eso sentí de todo... Creo que no escucho las palabras de mis miradas, mejor me habría infartado de la adrenalina...
Para ello dos besitos si es que llega a leer este post...

Mas de Celdax

Hola este es Celdax

Y es la segunda version de el Ac-sembler celular;

Contiene:
un Objeto global llamado celda

define tendencias

regla 1 Tendencia {
 valor = random;
 regla = random;
 tendencia = Tendencias...
}

celda.valor x y valor
celda.regla x y regla$
celda.inicio x y Tendencia
celda.fin x y Tendencia


Thursday, March 22, 2007

Asembler celular.

Este codigo fuente ya es interpretado en la version 2.0 de Compac que ahora se llama Cell-x

Sintaxis.

Programa 1 Hacer un pulso discreto.



<
regla 1 behaviora
valor = 1;
inicio=behaviorb;
>

llamada de estado recursiva.
<
regla 2 behaviorb
valor = 0;
inicio=behaviora;
>





Tuesday, March 06, 2007

Comunicación basada en estados impresos expresados en figuras gometricas.

Bueno, se me ha ocurrido la siguiente idea: Hacer una Máquinas de estados finitos y grabarla en uno de esos cubos coloridos, seria un excelente mecanismo de comunicación basada en estados, debido a que cada color (que podría ser representado como un número) representaría un estado de animo o una acción.
Asi mismo un estado de animo se asocia a un espacio contextual.
Y Zas!!! recordé eso de los espacios de trancicion y espacios de contexto que son la misma vaina en algunas circustancias:
Codigo:
Sea Fabio.getMind una objeto gramatical que se define como
Espacio de tranciciones:
  • Sea A una M.E.F. En el espacio R^n.
  • Existe una tabla de tranciones de dimención R^(n+1) que la define cual es la salida en funcion de sus entradas.
Espacios de contextos:
  • Sea A una M.E.F. En el espacio R^n.
  • Existe una tabla de tranciones de dimención R^(n+1) que la define cual es la salida en funcion de sus entradas. (Definicion de espacios de tranciones)
  • Sea E-k un sub-espacio de tranciones con atributos especiales* entonces al activarse esos estados se dice que esa M.E.F. n-dimencional esta activandose en funcion de un determinado contexto.

Atributos especiales o contexto.

  • Sea una caracteristica cuantificable c-n sobre cualquier análisis o componente gramatical (léxico, sintáctico o semántico).

Tuesday, February 13, 2007

Fast Lex Generator

Last Week i was developing a ver ugly IDE for scanner design. Result was very strange a very ussacramble Java-Lex-design-enviroment suported for lexical Analysis Design.

On s'apelle Rapide lex generatuer, et on peut faiter cotidians scanneres. cette es the adress for download la aplicación.

When Je escribe in mon pagine au suject the computinnig lenguajes I suis enchanté de employer touts les idioms that Yo speak.