编译原理

来源:互联网 发布:已知矩阵 计算A5次α 编辑:程序博客网 时间:2024/04/29 08:13

1. 正则表达式定义的语言

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的实例构成的串

2


3) Comments, consisting of a string surround by /* and */, without an intervening*/, unless it is inside double-quotes (")
[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. (\/\*) (.*^(\/\*)) (“(.*)”|ε) (.*^(\/\*)) (\*\/)  

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


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)*)*


4 为练习5中的每一个语言设计一个DFA或NFA


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

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

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


1)练习3.6.3

2)练习3.6.4

3)图 2-6


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


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


3)图3-30



7 用算法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:

0 0
原创粉丝点击