Requisito previo: Diseño de autómatas finitos
Introducción:
en este artículo, discutiremos el DFA en el código LEX que acepta la string que tiene números pares de ‘a’ sobre el alfabeto de entrada {a, b}. con la ayuda del ejemplo. Discutámoslo uno a uno.
Descripción general del problema:
código LEX que acepta la string que tiene números pares de ‘a’ sobre el alfabeto de entrada {a, b}.
Ejemplo –
Input : aba Output: Accepted Input : ababba Output: Not Accepted Input: 23ab Output:Invalid Input:ab345 Output:Invalid Input:aabababa 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 » Inválido «.
Si la string de entrada termina en A, muestra el mensaje » No aceptado «. De lo contrario, si la string de entrada termina en el estado INICIAL, se muestra el mensaje » 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.
Example - filename.l
Luego, después de guardar el programa, cierre el archivo Lex y luego abra la terminal y escriba los siguientes comandos de la siguiente manera.
lex filename.l cc lex.yy.c ./a.out
CÓDIGO LEX:
%{ %} %s A DEAD %% <INITIAL>a BEGIN A; <INITIAL>b BEGIN INITIAL; <INITIAL>[^ab\n] BEGIN DEAD; <INITIAL>\n BEGIN INITIAL; {printf("Accepted\n");} <A>a BEGIN INITIAL; <A>b BEGIN A; <A>[^ab\n] BEGIN DEAD; <A>\n BEGIN INITIAL; {printf("Not 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 –
Publicación traducida automáticamente
Artículo escrito por kashyapsingh y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA