- 49
- 0
- 约8.14千字
- 约 23页
- 2018-10-19 发布于山东
- 举报
课本可以不用看完,但是黄煜廉老师的课件以及这一份上面所有的都是他上课讲的例题都要掌握下来~能把这一份啃下来就几乎可以的了。加油!最后能为你们做的事情啦~(*^__^*) 嘻嘻……——雪清
正则表达式:
例2.1 在仅由字母表中的3个字符组成的简单字母表∑={a, b, c}中,考虑在这个字母表上的仅包括一个b的所有串的集合。
( a | c )* b ( a | c )*
例2.2 在与上面相同的字母表中,如果集合是包括了最多一个b的所有串。
( a | c )* b? ( a | c )*
DFA:
例2.6 串中仅有一个b的集合的正则表达式对应的DFA为?
例2.8 科学表示法的数字常量的正则表达式为:
nat = [0-9]+
signedNat = (+|-)? nat
number = signedNat(“.” nat)? (E signedNat)?
如何画对应的DFA?
解:先设digit = [0-9],sig = (+|-),得:
例2.9 非嵌套注释的DFA描述。Pascal注释{ ( ~} )* }对应的DFA为:
C注释 /* ...( */不同时出现 )... */ 的DFA为:
NFA:
例2.12 根据Thompson方法将正则表达式 ab|a转换为NFA。
例2.13 利用Thompson方法画出正则表达式letter(letter| digit)*对应的NFA。
例2.14 与正则表达式a*相对应的NFA为:
NFA转DFA:
例2.15 将下面的NFA转换为DFA:
解:
例2.16 将下面的NFA转换为DFA:
解:
例2.17 正则表达式letter(letter| digit)*对应的NFA转换成DFA:
解:
DFA最小化:
例2.18 将与正则表达式letter(letter| digit)*相对应的DFA最小化:(08级的大三第二学期考这道)
解:状态转换表为
letter
digit
{1}
{2,3,4,5,7,10}
{2,3,4,5,7,10}
{4,5,6,7,9,10}
{4,5,7,8,9,10}
{4,5,6,7,9,10}
{4,5,6,7,9,10}
{4,5,7,8,9,10}
{4,5,7,8,9,10}
{4,5,6,7,9,10}
{4,5,7,8,9,10}
最小化DFA为:
例2.19 将下面与正则表达式(a| ε) b*对应的DFA进行最小化。
解:状态转换表为
a
b
{1}
{2}
{3}
{2}
{3}
{3}
{3}
最小化DFA为:
词法分析代码:
state := 1; {start}
while state = 1 or 2 do
case state of
1: case input character of
letter: advance the input;
state := 2;
else state := ... {error or other};
end case;
2: case input character of
letter, digit: advance the input;
state := 2; {actually unnecessary}
else state := 3;
end case;
end case;
end while;
if state = 3 then accept else error;
state := 1; {start}
while state = 1, 2, 3 or 4 do
case state of
1: case input character of
“/”: advance the input;
state := 2;
else state := ... ; {error or other}
end case;
2: case input character of
“*”: advance the input;
state := 3;
else state := ... ; {error or other}
end case;
3: case input character of
“*”: advance the input;
state := 4;
else advance the input; {and stay in state 3}
end case;
4: case input character of
“/” : advance the input;
state := 5;
“*”: advance the input;
原创力文档

文档评论(0)