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