Skip to content

Instantly share code, notes, and snippets.

@chepecarlos
Created July 4, 2012 15:54
Show Gist options
  • Save chepecarlos/3048020 to your computer and use it in GitHub Desktop.
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
#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