- 1、本文档共23页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
华南师范大学 编译原理期末复习整理 pdf例题
正则表达式:
例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; {and stay in state 4}
else advance the input;
state := 3;
end case;
en
您可能关注的文档
最近下载
- 《市政排水管道气囊封堵施工规程》.pdf
- TOPRAAD920印刷模切开槽机.pdf VIP
- 单相整流电路建模与仿真.doc VIP
- 缺血性脑血管病临床管理指南解读.pptx VIP
- 工程概算预算审核方案(3篇).docx VIP
- 神经重症气管切开患者气道功能康复与管理专家共识2024.pptx VIP
- 2025年监理工程师之监理概论考试题库及答案(名师系列).docx VIP
- 2025年监理工程师之监理概论押题练习试卷B卷附答案 .pdf VIP
- 2025年监理工程师之监理概论考试题库及完整答案(必刷).docx VIP
- 2025年监理工程师之监理概论押题练习试卷A卷附答案 .pdf VIP
文档评论(0)