Autómata de pila X^n W Y^n

Parsing, Programación No Comments

No me voy a liar con conceptos y demás, entonces, miren la wikipedia:

http://es.wikipedia.org/wiki/Aut%C3%B3mata_con_pila

Claro cualquier duda también pueden dejarme un comentario y trataré de ayudarle si me es posible :).

Como repaso rápido, un autómata de pila no es más que un algoritmo que aparte de verificar un lenguaje determinado, tiene la posibilidad de poder controlar la aparición de los símbolos definidos en alfabeto de nuestro lenguaje. Para ser más práctico, un ejemplo claro de esto es en los lenguajes de programación, cuando hacemos la llamada a la instrucción if, que tiene sintaxis:

if ( condicion|comparacion ) ;

Como regla básica la instrucción if debe contener un parénesis abierto y otro cerrado, entonces, esta es la posibilidad de un autómata de pila.

Ahora les comparto el código de un programa que determina si la palabra escrita pertenece o no al siguiente lenguaje:

X^n W Y^n
Donde n>=1.

Donde la expresión mínima del lenguaje es:

Expresion a validar:
xwy
SINTAXIS CORRECTA

Las transíciones son:

1) (q0,x,#) -> (q1, )
2) (q1,x,#) -> (q1,a)
3) (q1,w,a) -> (q2, )
4) (q2,y,a) -> (q3,&)
5) (q3,y,a) -> (q3,&)
6) (q3,y,#) -> (q4, )

Más o menos, aclarar que “&” representa quitar un elemento de la pila.

Para compilar con g++:

g++ a202301.cpp -o a202301

Les dejo el código:

/*

Autor: Soul Lost

Descripcion: Lenguaje: x^n w y^n

Donde n>=1.

*/

#include<iostream.h>

#include<stdlib.h>

typedef char cadena[80];

enum alfabeto{x,y,w,FDC};

enum status{mal,bien};

cadena linea;

status result=mal;

alfabeto simbolo;

int pos;

char tope;

//Estructura para llevar el control de la pila

struct nodo{

	char smb;

	nodo* next;

};

nodo* first=NULL;

int leerCar();

int resultado();

int estado1();

int estado2();

int estado3();

int estado4();

int estado5();

int meter(char);

int sacar();

char obtener();

int main(){

    pos=-1;

    system("clear");

    cout<<"Expresion a validar:"<<endl;

    cin>>linea;

    meter('#');

    estado1();

    resultado();

    system("sleep 2");

    return 0;

}

int resultado(){

    if(result) cout<<"SINTAXIS CORRECTA"<<endl;

    else cout<<"EXPRESION NO VALIDA"<<endl;

    return 0;

}

int leerCar(){

    char caracter;

    pos++;

    caracter=toupper(linea[pos]);

    tope=obtener();

    if(caracter=='X') simbolo=x;

    else if(caracter=='Y') simbolo=y;

    else if(caracter=='W') simbolo=w;

    else if(caracter=='\0') simbolo=FDC;

    return 0; 

}

int estado1(){

    leerCar();

    if(simbolo==x && tope=='#'){

			meter('a');

			estado2();

		}

    return 0;

}

int estado2(){

    leerCar();

    if(simbolo==x && tope=='a'){

			meter('a');

			estado2();

		}

    else if(simbolo==w && tope=='a') estado3();	

    return 0;

}

int estado3(){

    leerCar();

    if(simbolo==y && tope=='a'){

			sacar();

			estado4();

		}

    return 0;

}

int estado4(){

    leerCar();

    if(simbolo==y && tope=='a'){

			sacar();

			estado4();

		}

		else if(simbolo==FDC) estado5();

    return 0;

}

int estado5(){

    if(tope=='#') result=bien;

    delete first;

    return 0;

}

int meter(char a){

	nodo* nuevo = new nodo;

	nuevo->smb=a;

	nuevo->next=first;

	first=nuevo;

	return 0;

}

int sacar(){

	if(first==NULL)

		return 0;

	if(first->next==NULL){

		delete first;

	}

	nodo* actual=first->next;

	nodo* temp=first;

	first=actual;

	delete temp;

	return 0;

}

char obtener(){

	return first->smb;

}

Automata de Pila

Califica el tema:
1 Star2 Stars3 Stars4 Stars5 Stars (2 votes, average: 3.5 out of 5)
Loading ... Loading ...

Apocalyptica - Farawall y No Education

Música 2 Comments

Apocalyptica es un grupo del genero CelloRock http://es.wikipedia.org/wiki/Cello_rock, disfrutenlas :D..

_Faraway_Apocalyptica.png

Apocalyptica - Faraway.mp3

Apocalyptica - No Education.mp3

Califica el tema:
1 Star2 Stars3 Stars4 Stars5 Stars (1 votes, average: 5 out of 5)
Loading ... Loading ...

Need For Speed Carbono y Cedega (GNU/Linux)

GNU/Linux 8 Comments

Cedega es una aplicación que sirve para emular juegos nativos de windows (especificamente de las librerías directX), este fork de wine ya lo había probado anteriormente, hace como un año aproximadamente, en ese entonces, aún no contaba con un GUI tan intuitivo como el actual, además dejaba mucho que deciar para los juegos que recientemente habían aparecido por el mercado (en ese entonces, quería probar el fifa 2005). Actualmente, me parece un alternativa muy estable para poder jugar de forma no nativa en windows. Como fase de pruebas y demostración, les inidicaré los pasos que tuve que seguir para poder emular Need for Speed Carbono:

1) La primera vez que arrancas cedega (en gnome: aplicaciones > juegos > TransGaming Cedega) aparecen las notas de licencia, que lógicamente debes aceptar XD.

_cedega01.png

2) Después debes especificar el directorio donde se encuentra el engine de cedega, en mi caso:

cedega-engine-6.0.2-local-update.i386.cpkg

_cedega02.png

3) Después vendrán una serie de pruebas que hay hacer para verificar que todo este correcto y tengamos gran posibilidad de usar cedega sin complicaciones ni problemas futuros.

_cedega04.png

Si el test nos arroja una franja verde como la de la imagen significa que está correcto.

4) Después viene rellenar especificaciones sobre nuestro hardware para la configuración de cedega, en mí caso, lo ha detectado todo XD.
_cedega05.png
5) Ahora si, terminamos el asistente y ya podremos empezar a emular juegos.
_cedega06.png
6) Para instalar un juego, pulsamos sobre Intall en la ventana principal y nos mostrará un ventana como la siguiente:
_cedega07.png
Donde:

Game Folder: Es el nombre del juego a emular
GDDB Entry: Es el nombre del juego a emular
Installer: Es el archivo que inicia el instalador de juego, generalmente y como es constumbre, es un archivo llamado setup.exe o install.exe

Subjetivamente tuve que montar la imagen del Need for Speed Carbono xD (un archivo *.mdf) de la siguiente forma:

mount /mnt/files/PC-Need.For.Speed.Carbono.mdf /mnt/cdrom -o loop=/dev/loop0

7) Si todo va bien, ya podemos empezar a instalar el juego como normalmente lo hacemos en windows (hasta eso, la instalación es más rápida que en el propio windows XD).
_cedega08.png
_cedega09.png

8) A probar y jugar :)
_cedega10.png

La emulación es buena y estable, puedo hasta jugar en fullscreen y el juego es jugable (no va como en cámara lenta XD), ahora queda mirar por los foros de cedega las opciones para darle mejor rendimiento (si las hay) y probar el juego modificando las configuraciones de vídeo del mismo.

Nos vemos :P.

Califica el tema:
1 Star2 Stars3 Stars4 Stars5 Stars (1 votes, average: 5 out of 5)
Loading ... Loading ...

Next Entries »