En este artículo, discutiremos el Código LEX que acepta la string que termina con ‘abb’ sobre el alfabeto de entrada {a,b} y veremos la implementación usando el código LEX y comprenderemos el enfoque. Discutámoslo uno por uno.
Descripción general del problema:
Código LEX que acepta la string que termina en ‘abb’ sobre el alfabeto de entrada {a,b}.
Ejemplo –
Input : abb Output : Accepted Input : abababb Output : Accepted Input : 23ab Output : Invalid Input : ab345 Output : Invalid Input : bbabaa 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 cuatro estados más: A, B, C 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 C, muestra el mensaje «Aceptado». De lo contrario, si la string de entrada termina en el estado INICIAL, A o B, 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.
Ejemplo –
filename.l
Luego, después de guardar el programa, cierre el archivo lex y luego abra el terminal y escriba los siguientes comandos de la siguiente manera.
lex filename.l cc lex.yy.c ./a.out
Implementación- Código LEX:
%{ %} %s A B C DEAD // not accepted state after visiting A %% <INITIAL>a BEGIN A; <INITIAL>b BEGIN INITIAL; <INITIAL>[^ab\n] BEGIN DEAD; <INITIAL>\n BEGIN INITIAL; {printf("Not Accepted\n");} // not accepted state after visiting A and B state <A>a BEGIN A; <A>b BEGIN B; <A>[^ab\n] BEGIN DEAD; <A>\n BEGIN INITIAL; {printf("Not Accepted\n");} // // not accepted state after visiting A and C state <B>a BEGIN A; <B>b BEGIN C; <B>[^ab\n] BEGIN DEAD; <B>\n BEGIN INITIAL; {printf("Not Accepted\n");} // Accepted case <C>a BEGIN A; <C>b BEGIN INITIAL; <C>[^ab\n] BEGIN DEAD; <C>\n BEGIN INITIAL; {printf("Accepted\n");} // Invalid Case <DEAD>[^\n] BEGIN DEAD; <DEAD>\n BEGIN INITIAL; {printf("Invalid\n");} %% // yywrap method int yywrap() { return 1; } // main method int main() { printf("Enter String\n"); // called yylex yylex(); return 0; }
Producción :
Publicación traducida automáticamente
Artículo escrito por kashyapsingh y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA