📌  相关文章
📜  LEX代码中的DFA,接受以11结尾的字符串

📅  最后修改于: 2021-06-28 07:28:38             🧑  作者: Mango

先决条件:设计有限自动机
问题:设计一个LEX代码以构造一个接受该语言的DFA:输入“ 0”和“ 1”上所有以“ 11”结尾的字符串。

例子:

Input: 100011 
Output: Accepted

Input: 100101
Output: Not Accepted

Input: asdf
Output: Invalid 

方法:
LEX默认为我们提供一个INITIAL状态。因此,为了制作DFA,请将其用作DFA的初始状态。现在我们再定义三个状态A,B和DEAD,如果遇到错误或无效的输入,将使用DEAD状态。当用户输入无效字符,进入DEAD状态并打印消息“ INVALID”,如果输入字符串在状态B结束,则显示消息“ Accepted”。如果输入字符串在状态INITIAL和A处结束,则显示消息“不接受”。

笔记:
要编译LEX程序,用户需要UNIX系统和flex,可以使用sudo apt-get install flex安装它。使用上述所有规范,打开UNIX终端并执行以下操作:

  1. 使用lex程序将规范文件更改为C语言程序。生成的程序在lex.yy.c文件中。
  2. 使用带有-ll标志的cc命令来编译程序并将其与lex子例程库链接。生成的可执行程序在a.out文件中。
lex lextest
cc lex.yy.c -lfl 

LEX代码:

输出: