Código LEX que acepta una string que contiene el tercer último elemento ‘a’ sobre el alfabeto de entrada {a, b}

En este artículo, analizaremos el DFA en código LEX que acepta una string que contiene el penúltimo elemento ‘a’ sobre el alfabeto de entrada {a, b} con la ayuda de un ejemplo. Discutámoslo uno a uno.

Requisito previo: diseño de autómatas finitos

Descripción general del problema: 
diseñe un DFA en código LEX que acepte una string que contenga el penúltimo elemento ‘a’ sobre el alfabeto de entrada {a, b}. 

Ejemplo –

Input : aaab
Output: Accepted

Input : ab
Output: Not Accepted

Input: ababab
Output:Not Accepted

Input:123
Output:Invalid

Input:bbba
Output:Not Accepted

Input:bbbaaab
Output:Accepted

Enfoque:
LEX nos proporciona un estado INICIAL por defecto. Entonces, para hacer un DFA , use esto como el estado inicial del DFA . Definimos ocho estados más: A, B, C, D, E, F, G y DEAD, donde el estado DEAD se usaría si se encontrara una entrada incorrecta o no válida. Cuando el usuario ingresa un carácter no válido, pasa al estado MUERTO y el mensaje de impresión «No válido». Si la string de entrada termina en el estado INICIAL, A, B o F, se muestra el mensaje «No aceptado». De lo contrario, si la string de entrada termina en el estado C, D, E o G, se muestra el mensaje «Aceptado».

Nota:
para compilar el programa lex, necesitamos tener un sistema Unix que tenga flex instalado. Luego, debemos 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 B C D E F G DEAD
%%
<INITIAL>b BEGIN INITIAL;
<INITIAL>a BEGIN A;
<INITIAL>[^ab\n] BEGIN DEAD;
<INITIAL>\n BEGIN INITIAL; {printf("Not Accepted\n");}

<A>b BEGIN F;
<A>a BEGIN B;
<A>[^ab\n] BEGIN DEAD;
<A>\n BEGIN INITIAL; {printf("Not Accepted\n");}

<B>b BEGIN D;
<B>a BEGIN C;
<B>[^ab\n] BEGIN DEAD;
<B>\n BEGIN INITIAL; {printf("Not Accepted\n");}

<C>b BEGIN D;
<C>a BEGIN C;
<C>[^ab\n] BEGIN DEAD;
<C>\n BEGIN INITIAL; {printf("Accepted\n");} 

<D>b BEGIN G;
<D>a BEGIN E;
<D>[^ab\n] BEGIN DEAD;
<D>\n BEGIN INITIAL; {printf("Accepted\n");}

<E>b BEGIN F;
<E>a BEGIN B;
<E>[^ab\n] BEGIN DEAD;
<E>\n BEGIN INITIAL; {printf("Accepted\n");}

<F>b BEGIN G;
<F>a BEGIN E;
<F>[^ab\n] BEGIN DEAD;
<F>\n BEGIN INITIAL; {printf("Not Accepted\n");}

<G>b BEGIN INITIAL;
<G>a BEGIN A;
<G>[^ab\n] BEGIN DEAD;
<G>\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 :

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 *