Created
July 4, 2012 15:54
-
-
Save chepecarlos/3048020 to your computer and use it in GitHub Desktop.
Automatade finito que recoones palabras reservadas, indentificadores y operadore aritmeticos de MUSIM/0
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <iostream> | |
#include <string.h> | |
using namespace std; | |
bool simular_af(char *c) | |
{ | |
int pos = 0; //posicion del caracter a evaluar en la cadena | |
int state = 0; //estado del automata | |
int longitud = strlen(c); | |
while( (state == 0 || state == 1 ) && pos < longitud) | |
{ | |
switch(state) | |
{ | |
case 0://estado 0 | |
if( (c[pos] >= 'a' and c[pos] <= 'z') or | |
(c[pos] >= '0' and c[pos] <= '9') or | |
(c[pos] == '-' or c[pos] == '+' or c[pos] == '.' or c[pos] == '*' or c[pos] == '/' or c[pos] == '%') or | |
(c[pos] == '=' or c[pos] == '(' or c[pos] ==')' or c[pos] ==';' or c[pos] =='{' or c[pos] =='{' or c[pos] =='}') or | |
(c[pos] == 'R' or c[pos] == 'W' or c[pos] =='M') | |
) | |
state = 1; | |
else | |
return false; | |
break; | |
case 1://estado 1 | |
return false; //error, el estado solo puede ser 0||1 | |
break; | |
default: | |
return false; //error, el estado solo puede ser 0||1 | |
}; | |
pos++; | |
} | |
if(state == 1)//estado de aceptacion | |
return true; | |
else | |
return false; | |
} | |
int main(){ | |
char cadena[80]; | |
cout<<"Ingrese la cadena a analizar: "; | |
cin.getline(cadena,80); | |
if(!simular_af(cadena)) | |
cout<<"Error: Identificador no valido"<<endl; | |
else | |
cout<<"La cadena '"<<cadena<<"' es un identificador valido"<<endl; | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment