08年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大学生活。此系列是对四年专业课程学习的回顾,索引参见:http://blog.csdn.net/xiaowei_cqu/article/details/7747205

《编译原理》第三章习题

我们的教材是那本经典的“龙书”: 《Compiler: Principles, Techniques, and Tools》
灰常灰常喜欢小监老师的课,就是做作业的记忆太痛苦了。。。

3.3.2 试描述下列正则表达式定义的语言

1) a(a|b)*a
以a开头且以a结尾,中间由零个或多个a或b的实例构成的串
2) ((ε|a)b*)*
零个或多个a或b的实例构成的串
3)(a|b)*a(a|b)(a|b)
三个或多个a或b的实例构成的串,且倒数第三个实例一定为a。
4)a*ba*ba*ba*
零个或多个a的实例,三个b的实例构成的串。
!!5)(aa|bb)*((ab|ba)(aa|bb)*(ab|ba)(aa|bb)*)*
零个或偶数个a的实例,相同个数的b的实例构成的串

3.3.5

3) Comments, consisting of a string surround by /* and */, without an intervening*/, unless it is inside double-quotes (")

(\/\*) (.*^(\/\*)) (“(.*)”|ε) (.*^(\/\*)) (\*\/)

3.4.1 给出识别练习3.3.2中各个正则表达式所描述的语言的状态转换图

1) a(a|b)*a


2) ((ε|a)b*)*

3)(a|b)*a(a|b)(a|b)

4)a*ba*ba*ba*

!!5)(aa|bb)*((ab|ba)(aa|bb)*(ab|ba)(aa|bb)*)*


3.6.2 为练习3.3.5中的每一个语言设计一个DFA或NFA


Comments, consisting of a string surround by /* and */, without an intervening*/, unless it is inside double-quotes (")

设计NFA如下:
(感觉这个有些问题,不知道^可不可以用作转移条件。。。。)

3.6.5 给出如下练习中的NFA的转换表

1)练习3.6.3

2)练习3.6.4

3)图 2-6


3.7.1 将下列图中的NFA转换为DFA


1)图3-26
 
2)图3-29


3)图3-30



3.7.3 用算法3.23和3.20将正则表达式转换为DFA


1) (a|b)* 
由算法3.23得到NFA:
由算法3.20得到DFA:
2) (a*|b*)* 
由算法3.23得到NFA:
由算法3.20得到DFA:
3) ((ε|a)b*)*
由算法3.23得到NFA:

由算法3.20得到DFA:
此处可以看到 1) 2) 3)表示的语义是等价的,NFA可以有多种表示形式,但DFA是唯一的
4)(a|b)*abb(a|b)*
由算法3.23得到NFA:
由算法3.20得到DFA:

转载请注明出处:http://blog.csdn.net/xiaowei_cqu/article/details/7764967


【编译原理】正则表达式相关推荐

  1. [系列][编译原理]正则表达式

    关于正则表达式,作为软件工程师应该比较熟悉了.所谓正则表达式,就是表示字符串的格式.正则表达式r完全由它所匹配的串集来定义.这个集合称为由正则表达式生成的语言,写作L(r).此处的语言只是表示&quo ...

  2. 正则表达式引擎的构建——基于编译原理DFA(龙书第三章)——1 概述

    说明:本系列文章介绍的算法均来自编译原理(龙书)一书,如果读者对代码没有兴趣,只想了解算法思路,完全可以阅读龙书相关章节内容,比我讲得清晰透彻. 序: 啃编译原理半年以来,任然徘徊在前4章,其间反反复 ...

  3. c语言正则表达式_CS143:编译原理|PA2:正则表达式和词法分析

    本文使用 Zhihu On VSCode 创作并发布 这是本人实现斯坦福CS143变编程作业的笔记,对应第二次作业PA2.有关文章目录.环境搭建和一些说明请看第一篇:CS143:编译原理 | 环境搭建 ...

  4. [编译原理随记]正则表达式转为NFA状态图(Thompsion构造法)

    上级文章 [编译原理随记]正则表达式记号和状态图:https://blog.csdn.net/qq_28033719/article/details/107067798 [编译原理随记]NFA转DFA ...

  5. 编译原理-正则文法与正则表达式的相互转化

    正则文法与正则表达式的相互转化 前言 一.正则文法 1.定义 2.例子 二.正则表达式 1.定义 2.例子 三.转换规则 1.正则文法转换为正则表达式 2.正则表达式转换为正则文法 四.转换例子 1. ...

  6. 正则表达式引擎的构建——基于编译原理DFA(龙书第三章)——5 DFA最小化

    完整引擎代码在github上,地址为:https://github.com/sun2043430/RegularExpression_Engine.git DFA最小化的算法原理 "DFA状 ...

  7. 学了编译原理能否用 Java 写一个编译器或解释器?

    16 个回答 默认排序​ RednaxelaFX JavaScript.编译原理.编程 等 7 个话题的优秀回答者 282 人赞同了该回答 能.我一开始学编译原理的时候就是用Java写了好多小编译器和 ...

  8. 我看过的编译原理方面的好文章

    本文不定期更新,最后更新于2019-7-6 编译原理 编译原理三大经典书籍(龙书 虎书 鲸书) 前端为什么要会正则表达式 - 知乎 一次性搞懂JavaScript正则表达式之引擎 - 掘金 没有AST ...

  9. 添物 不花钱学计算机及编程(预备篇)— 编译原理

    编译原理是将一门语言翻译为另一门语言的学科.如果您只是想当个简单的程序员是可以不用学习的,或者有个了解就可以.但是如果您想更好的发展,就要很好的掌握了. 这门课程最大的特色就是,要自己写代码学习,不能 ...

最新文章

  1. 腾讯天衍实验室夺世界机器人大赛双冠军,新算法突破脑机接口瓶颈
  2. Jquery调用webservice
  3. 【计算机网络】数据链路层 : 差错控制 ( 检错编码 | 奇偶校验码 | CRC 循环冗余码 )★
  4. 开源使得所有的软件卖成白菜价,但终将普惠世界!
  5. 信息系统项目管理师优秀论文:论信息系统范围管理02
  6. python学习-列表的操作(常用函数均会介绍)
  7. postman新手使用教程
  8. CleanCodeHandbook Chapter 7: Stack(39-41)
  9. Excel2010学习笔记(二):公式函数篇
  10. 何恺明Focal Loss改进版!GFocal Loss:良心技术,无cost涨点
  11. python开发贴吧_python爬虫-贴吧
  12. Cypress UI 自动化测试框架
  13. 【React之文件的运行】用webstorm运行npm,实现网页的刷新
  14. 【TcaplusDB知识库】快速上手TDR表的增删查改操作
  15. 物理Standby数据库的文件路径转换(1)
  16. 飞桨 DNN波士顿房价预测
  17. cf刷题记录- 5 1
  18. 学习ARM开发(10)
  19. IIS 配置PHP环境,可以运行PHP网站
  20. 点到线段的最短距离算法

热门文章

  1. 计算机视觉常用算法整理
  2. 程序员面试常见问题及回答技巧
  3. 关于清空表数据的几种sql语句及区别
  4. 手把手教你用Python网络爬虫获取壁纸图片
  5. 山东青岛电子计算机技校,官方公布 | 青岛市2017年中职技校录取分数线
  6. 视频教程-零基础学Java编程—Java从小白到大咖-Java
  7. python序列解包求水仙花数_790.琉璃菜的糖浆欠火或过火,都会影响成品的( )。
  8. 174_技巧_Power BI 动态格式(万|亿)
  9. 2022年3月份报告合辑 附下载
  10. 心脏遥测监控系统服务器,移动心脏遥测可长时间监测患者心律 诊断率高达61%...