在 LEX 代码中设计 DFA,该代码接受输入字母表{0,1}
上具有偶数二进制数的字符串
问题概述– 在 LEX 代码中设计一个 DFA,它接受输入字母表{0,1}上具有偶数二进制数的字符串。
示例–
Input : 1010
Output: Accepted
Input : 1001
Output: Not Accepted
Input: 23ab
Output:Invalid
Input:ab345
Output:Invalid
Input:010101
Output:Not Accepted
方法: LEX 默认为我们提供一个 INITIAL 状态。所以要做一个 DFA,用这个作为 DFA 的初始状态。我们定义了另外两种状态:A 和 DEAD,如果遇到错误或无效的输入,将使用 DEAD 状态。当用户输入无效字符时,移动到“死亡”状态,然后打印“无效”。如果输入字符串以 A 结尾,则显示消息“已接受”。否则,如果输入字符串在初始状态结束,则显示消息“不接受”。
注意– 要编译 lex 程序,我们需要一个安装了 flex 的 Unix 系统。然后我们需要用。l 分机。 例如- filename.l 然后在保存程序后关闭 lex 文件,然后打开终端,写下如下命令。
lex filename.l
cc lex.yy.c
./a.out
LEX CODE :
%{
%}
%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;
}
输出:
Enter String
1100
Accepted
1010
Accepted
0001
Not Accepted
abc
Invalid
0101
Not Accepted
版权属于:月萌API www.moonapi.com,转载请注明出处