Diseñe DFA en código LEX que acepte la string con un número binario par sobre el alfabeto de entrada {0,1}

Descripción general del problema: 
diseñe un DFA en código LEX que acepte la string que tiene un número binario par sobre el alfabeto de entrada {0,1}.

Ejemplo – 

Input : 1010
Output: Accepted

Input : 1001
Output: Not Accepted

Input: 23ab
Output:Invalid

Input:ab345
Output:Invalid

Input:010101
Output:Not Accepted

Enfoque:
LEX nos proporciona un estado INICIAL por defecto. Entonces, para hacer un DFA, use esto como el estado inicial del DFA. Definimos dos estados más: A y DEAD, donde el estado DEAD se usaría si se encontrara una entrada incorrecta o no válida. Cuando el usuario ingrese un carácter no válido, muévase al estado MUERTO y luego imprima «No válido». Si la string de entrada termina en A, muestra el mensaje «Aceptado». De lo contrario, si la string de entrada termina en el estado INICIAL, se muestra el mensaje «No aceptado».

Nota:
para compilar el programa lex, necesitamos tener un sistema Unix que tenga flex instalado. Luego necesitamos guardar el archivo con la extensión .l.
Por ejemplo, filename.l
Luego, después de guardar el programa, cierra el archivo lex y luego abre el terminal y escribe los siguientes comandos de la siguiente manera.

lex filename.l
cc lex.yy.c
./a.out

CÓDIGO LEX:

%{
%}
  
%s A DEAD
  
%%
<INITIAL>0 BEGIN A;
<INITIAL>1 BEGIN INITIAL;
<INITIAL>[^01\n] BEGIN DEAD;
<INITIAL>\n BEGIN INITIAL; {printf("Not Accepted\n");}
  
<A>0 BEGIN A;
<A>1 BEGIN INITIAL;
<A>[^01\n] BEGIN DEAD;
<A>\n BEGIN INITIAL; {printf("Accepted\n");}
  
<DEAD>[^\n] BEGIN DEAD;
<DEAD>\n BEGIN INITIAL; {printf("Invalid\n");} 
  
%%

int yywrap()
{
    return 1;
}  
int main()
{
    printf("Enter String\n");
    yylex();
return 0;
}

Producción :

Enter String
1100
Accepted
1010
Accepted
0001
Not Accepted
abc
Invalid
0101
Not Accepted

Publicación traducida automáticamente

Artículo escrito por kashyapsingh y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *