📜  LEX代码中的DFA,它接受偶数个零和偶数个1

📅  最后修改于: 2022-05-13 01:54:10.547000             🧑  作者: Mango

LEX代码中的DFA,它接受偶数个零和偶数个1

Lex 是一个生成词法分析器的计算机程序,通常与 YACC 解析器生成器一起使用。 Lex 最初由 Mike Lesk 和 Eric Schmidt 编写并于 1975 年描述,是许多 Unix 系统上的标准词法分析器生成器,并且等效工具被指定为 POSIX 标准的一部分。 Lex 读取指定词法分析器的输入流并输出以 C 编程语言实现词法分析器的源代码。

确定性有限接受器 –
在计算理论中,作为理论计算机科学的一个分支,确定性有限自动机 (DFA)——也称为确定性有限接受器 (DFA) 和确定性有限状态机 (DFSM)——是一种有限状态机,它接受和拒绝符号字符串,并且只为每个输入字符串生成自动机的唯一计算(或运行)。确定性是指计算的唯一性。为了寻找捕获有限状态机的最简单模型,McCulloch 和 Pitts 是最早在 1943 年引入类似于有限自动机概念的研究人员之一。

方法 -

33

LEX 默认为我们提供了一个初始状态。所以要制作一个DFA,使用这个初始状态作为DFA的初始状态。定义另外两个状态A 和 B ,其中 B 是在遇到错误或无效输入时将使用的死状态。当用户得到无效输入时,移动到状态 B 并打印消息“INVALID”,如果用户从状态 A 到达 INITIAL 状态并带有“\n”,则显示消息“Not Accepted”。但是如果用户在初始状态上得到一个\n,用户会显示一条消息“Accepted”。

例子 -

Input : 1001
Output : Accepted

Input : hjabdba
Output : INVALID

要实现上述 DFA,用户需要将以下代码写入扩展名为 .l 的 lex 文件中。

笔记 :

代码 -

C++
lex lextest
cc lex.yy.c -lfl


输出 -

方法2:-

方法:-

LEX 默认为我们提供了一个初始状态。因此,要制作 DFA,请将其用作 DFA 的初始状态。我们定义了另外四种状态:A、B、C 和 DEAD,如果遇到错误或无效输入,则使用 DEAD 状态。当用户输入无效字符时,进入 DEAD 状态并打印消息“INVALID”,如果输入字符串以状态 INITIAL 结束,则显示消息“Accepted”。如果输入字符串以状态 A、B、C 结束,则显示消息“未接受”。

法典:-

输出:-