【编译原理】正则表达式
2012-07-21 21:49
639 查看
08年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大学生活。此系列是对四年专业课程学习的回顾,索引参见:/article/1413966.html
灰常灰常喜欢小监老师的课,就是做作业的记忆太痛苦了。。。
以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的实例构成的串
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)*)*
设计NFA如下:
(感觉这个有些问题,不知道^可不可以用作转移条件。。。。)
2)练习3.6.4
[b]3)图 2-6
[/b][b]
[/b]
[/b][b]
[/b][b]2)图3-29
[/b][b]
[/b][b]
[/b][b]3)图3-30
[/b][b]
[/b][b]
[/b]
由算法3.23得到NFA:
由算法3.20得到DFA:
2) (a*|b*)*
由算法3.23得到NFA:
由算法3.20得到DFA:
3) ((ε|a)b*)*
由算法3.23得到NFA:
[b]
[/b]由算法3.20得到DFA:
此处可以看到 1) 2) 3)表示的语义是等价的,NFA可以有多种表示形式,但DFA是唯一的
4)(a|b)*abb(a|b)*
由算法3.23得到NFA:
由算法3.20得到DFA:
《编译原理》第三章习题
我们的教材是那本经典的“龙书”:《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)*a2) ((ε|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.32)练习3.6.4
[b]3)图 2-6
[/b][b]
[/b]
[b]3.7.1 将下列图中的NFA转换为DFA[/b]
[b]1)图3-26[/b][b]
[/b][b]2)图3-29
[/b][b]
[/b][b]
[/b][b]3)图3-30
[/b][b]
[/b][b]
[/b]
[b][b]3.7.3 用算法3.23和3.20将正则表达式转换为DFA[/b][/b]
[b][/b]1) (a|b)*由算法3.23得到NFA:
由算法3.20得到DFA:
2) (a*|b*)*
由算法3.23得到NFA:
由算法3.20得到DFA:
3) ((ε|a)b*)*
由算法3.23得到NFA:
[b]
[/b]由算法3.20得到DFA:
此处可以看到 1) 2) 3)表示的语义是等价的,NFA可以有多种表示形式,但DFA是唯一的
4)(a|b)*abb(a|b)*
由算法3.23得到NFA:
由算法3.20得到DFA:
转载请注明出处:/article/1413963.html
相关文章推荐
- 正则表达式(编译原理)
- 编译原理-词法分析05-正则表达式到DFA-01
- 正则表达式引擎的构建——基于编译原理DFA(龙书第三章)——2 构造抽象语法树
- 编译原理中正则表达式直接构造DFA,DFA的最小化算法
- 正则表达式引擎的构建——基于编译原理DFA(龙书第三章)——1 概述
- 编译原理之正则表达式
- 编译原理中的正则表达式、NFA和DFA
- [系列][编译原理]正则表达式
- 正则表达式引擎的构建——基于编译原理DFA(龙书第三章)——1 概述
- 正则表达式引擎的构建——基于编译原理DFA(龙书第三章)——3 计算4个函数
- 编译原理中的正则表达式、NFA和DFA
- 正则表达式引擎的构建——基于编译原理DFA(龙书第三章)——4 构造DFA
- 正则表达式引擎的构建——基于编译原理DFA(龙书第三章)——3 计算4个函数
- 正则表达式引擎的构建——基于编译原理DFA(龙书第三章)——2 构造抽象语法树
- 编译原理-词法分析02-正则表达式
- 正则表达式引擎的构建——基于编译原理DFA(龙书第三章)——5 DFA最小化
- 正则表达式引擎的构建——基于编译原理DFA(龙书第三章)——2 构造抽象语法树
- 编译原理中正则表达式直接构造DFA,DFA的最小化算法
- 编译原理——赋值语句和简单表达式(十四)
- 编译原理之消除算术表达式文法的左递归