实验一词法分析.docVIP

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编译原理实验一 词法分析 1.实验目的 通过实验掌握词法分析的理论、原理和方法,为语法分析做准备。 2.实验内容: 十六进制数识别器:规定是:必须以十六进制数字打头,以H结尾,十六进制数中允许使用的数字为0-9,字母为A,B,C,D,E, F(分别表示0~15)。试设计一个DFA,使它能识别无符号的十六进制整数,并编制相应的识别程序。 输入:学生自行确定符号串的输入形式,如键盘输入、文本文件、字符数组等。 输出:标识出规范的符号串与不合规范的符号串。 词法分析:设计、编制、调试一个识别一个Little语言单词的词法分析程序(见附录1)。 输入:学生自行确定符号串的输入形式,如键盘输入、文本文件、字符数组等。 输出:二元组。 3.实验要求: 上机前编写完整的实验报告,报告中要体现分析?设计?实现等几个过程;如无实验报告,则取消本次上机资格,实验成绩以0分记。 严禁相互抄袭,否则实验成绩以0分记; 有完整的源代码,源码有规范的注释,无明显的语法错误; 4.实验步骤 分析与设计 a、 文法:该语言的十六进制,如:0aH,77H,7BH等由以数字打头及以H结尾;该语言的标识符,如:Num,a3,go等由A到Z(or a到z)和0至9所组成;该语言的无符号的十进制,如:8,90,123等由0到9之间的任意数字组成。由以上可得出该语言的文法可表示如下: G(S) = (VN,VT,P,S) ???????其中VN?=?{S,X’,Y’,Z’,M’,W’,α,β,γ,μ,υ,ω} ????VT?= {0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z, A,B,C,D,E,F,G,H,I,G,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z} ???α= 0|1| 2|3|4|5|6|7|8|9 ????β?= a|b|c|d|e|f|A|B|C|D|E|F γ?=g|?h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|G|H|I|G|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z ??????S??→?X’|Y’|Z’ ???????X’?→?υ|υM’ ?M’?→ω|ωM’ υ?→β|γ ω?→α|β|γ ????????Y’?→?α|αY’ ????????Z’?→?αH|αW’H ?W’?→μ|μW’ ?μ?→α|β 可见,上式方法中,X’表示出了语言的标识符,而Y’表示出了语言的无符号的十进制,Z’表示出了语言中的十六进制。 ∵?上式G(S)文法中,各式右边只有单个的终结符号 ∴?显然,以上文法G(S)已是正规文法。 (2)正规文法转成正规式:具体步骤如下: ∵???M’?→?ω|ωM’???? ??可表示为M’?→ω*ω W’?→?μ|μW’???????可表示为W’?→μ*μ??? ??????????????Z’??→?α|αZ’?????????可表示为Z’?→?α*α ????∴ 转换成正规表达式为:S=υ| υω*ω |αH | αμ*μH |α*α 代入可得:S= (β|γ) | (β|γ) (α|β|γ)*(α|β|γ) |αH | α(α|β)*?(α|β)H |α*α ? (3)正规式转成NFA(分裂法) 初始的NFA图下所示: 图1?初始NFA图 经过替换规则替换后得到的最终NFA图如下所示: ? 图2?最终的NFA图 (4)NFA转成DFA及DFA最小化(造表法) 对应以上的NFA图,我们可用造表法来表示如下: ? ????显然,由图可看出,状态2与状态5等价,而状态1与状态3等价,这里省去状态3和状态5,并将所以指向状态3的状态都指向状态1,指向状态5的都指向状态2。由此可画出最小化的DFA图如下: 图3??最小化的DFA图 ? 可见,终结状态1表示出了无符号的十进制,终结状态2表示出了标识符,状态6表示出了十六进制的整数。 b、 单词的BNF表示 标识符- 字母字母数字串 字母数字串-字母字母数字串|数字字母数字串| 下划线字母数字串|ε 无符号整数- 数字数字串 数字串- 数字数字串 |ε 加法运算符- + 减法运算符- - 大于关系运算符- 大于等于关系运算符- = 由此可知,需将单词分为五种: 关键字1 标识符2 常数3 运算符4 分隔符5 printf a 0 + , main b 1 _ ; int c 2 * ( if student 3 / ) then sum 4 = { else k 5 } return m 6 …. …. …. 7 = 8 = 9 != 编码实现

文档评论(0)

smashing + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档