用c语言采用模拟dfa算法编写一个扫描器.pdf

用c语言采用模拟dfa算法编写一个扫描器.pdf

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
` 用 C 语言采用模拟 DFA算法编写一个扫描器 /* 第一章:相关知识 DFA定义:一个确定的有穷自动机( DFA)M 是一个五元组: M= (K, Σ,f ,S,Z )其中 ① K 是一个有穷集,它的每个元素称为一个状态; ② Σ是一个有穷字母表,它的每个元素称为一个输入符号,所以也称 Σ为输入符号字 母表; ③ f 是转换函数,是 K ×Σ→K上的映射,即,如 f (ki ,a )=kj, (ki ∈K,kj ∈K)就意味着,当前状态为 ki,输入符为 a 时,将转换为下一个状态 kj , 我们把 kj 称作 ki 的一个后继状态; ④ S ∈ K 是唯一的一个初态; ⑤ Z??K 是一个终态集,终态也称可接受状态或结束状态。 第二章:题目 用 C 语言采用模拟 DFA算法编写一个扫描器(词法分析器)用来识别: 由任意个 a 或 b 开始后接 aa 再自加或自减 1 的字符串, 即正规式 r=(a|b)*aa(+|-)1 描述的语 言 L (r )。 该词法分析器的任务: (1)滤掉源程序中的无用成分,如空格; (2 )识别正规式 r=(a|b)*aa(+|-)1 描述的字符串。 从键盘读入或打开文件读入字符串,词法分析器读入字符 ywe 串后扫描源字符串, 若发现符合符合正规式 r 描述的字符串时,输出 “yes或 ”可接受“ ”或 “可识别 ”, 否则输出 “no或”“不可识别 ”。 第三章:分析 第一节 . 根据正规式 (a|b)*aa(+|-)1 ,我们可以分析出 K 有 10 个状态,也就是 10 个元素: 状态 s0:这时候已经识别的字符个数为 0 ,也就是开始状态 状态 s1:从状态 s0 开始接受连续的字母 'a' ,转到状态 s1 状态 s2:从状态 s0 开始接受连续的字母 'b' ,转到状态 s2 状态 s3:从 s2 开始接受了一个字母 'a' ,转到状态 s3 状态 s4:从 s3 开始接受了一个字母 'a' ,转到状态 s4 状态 s5:如果 s1 已经连续接受了至少两个字母 'a',从 s4 开始接受一个符号 '+' ,转到状 态 s5 。 或 从 s4 开始接受了一个符号 '+' ,转到状态 s5 。 状态 s6:如果 s1 已经连续接受了至少两个字母 'a', 从 s4 开始接受一个符号 '-' ,转到状 态 s6 。 或 从 s4 开始接受了一个符号 '-' ,转到状态 s6 。 状态 s7:从 s5 或 s6 开始接受了一个数字 '1' ,转到 s7。 状态 s8:从 s7 开始接受了一个字符串结束符号 '\0' ,转到状态 s8。【这是成功状态】。 Word 文档 ` 状态 s9: 【这是出错状态】。 第二节 . 根据正规式 (a|b)*aa(+|-)1 ,我们可以分析出 Σ包含的字母有: a,b,+,-,1 第三节 . 根据正规式 (a|b)*aa(+|-)1 ,我们分析出转换函数 f 有: F[0]. s0 --(输入一个字母 '

文档评论(0)

麻麻
该用户很懒,什么也没介绍
全民来找茬

相关文档

相关课程推荐