- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《编译原理实践及应用》(一)
* * * * * * * * 转换后是一个不确定的有穷自动机 * * * * * * * * * * * * * * * * * * * * * * * * * 为什么要做这样的变换:因为NFA中每条弧用?* 上的一个字来表示,而DFA每条弧用? 上的一个符号来表示;DFA有1个开始状态,而NFA可以有多个初始状态。 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 最左推导在语法树中的表现主要是:总是沿最左分支替换到底,再是次左边…… * * * * * 语言的设计与软件系统的设计类似 * * * * * * * * * * * * * * * * * * * * * 最左推导在语法树中的表现主要是:总是沿最左分支替换到底,再是次左边…… * * * * * 语言的设计与软件系统的设计类似 * * * * * * UV={aa00,aa11,bb00,bb11} * * * * * * * * * * * * * * * * * * * * * * * * * * UV={aa00,aa11,bb00,bb11} * * * * * * * * * * * * LALR(1)分析 LALR方法是一种折衷方法,它的分析表比LR(1)分析表要小得多,能力也弱一些,但它能应用在一些SLR(1)不能应用的场合。实际的编译器经常使用这种方法,大多数程序设计语言的语法结构能方便地由LALR文法表示。 在LR(1)分析表中,若存在两个状态(项目集)除向前搜索符不同外,其它部分都是相同的,称这样的两个LR(1)项目集是同心的 。 如果把同心的LR(1)项目集合并,心仍相同(心就是一个LR(0)项目集),超前搜索符集为各同心集超前搜索符的并集,合并同心集后go函数自动合并。称为LALR方法。 构造LALR分析表的算法: (1)构造LR(1)项目集规范族,C={I0,I1,…,In}。 (2)合并所有的同心集,得到LALR(1)的项目集族C={J0,J1,…,Jm}。含有项目[S→·S,#] 为初态。 (3)由C‘构造动作(action)表。 ① 若[A→α·aβ,b]∈Jk,且GO(Jk,a)=Jj,其中a∈VT,则置action[k,a]=Sj, ② 若项目[A→α·,a]∈Jk,其中a∈VT,则置action[k,a]=rj,rj的含义是按产生式A→α进行归约 ③ 若项目[S→S·,#]∈Ik,则置action[k,#]=acc,表示分析成功,接受。 (4)goto表的构造。若不是同心集的项目集,转换函数的构造与LR(1)的相同;假定Ii1,Ii2,…,Iin是同心集,合并后的新集为Jk,转换函数GO(Ii1,X),GO(Ii2,X),…,GO(Iin,X)也为同心集,将其合并后记作Ji,因此,有GO(Jk,X)= Ji,所以当X为非终结符时,GO(Jk,X)=Ji,则置goto[k,X]=i,表示在k状态下遇到非终结符X时,把X和i分别移到文法符号栈和状态栈。 (5)分析表中凡不能用(3)、(4)填入信息的空白均填上“出错标志”。 该文法的LR(1)项目集规范族 例:文法 (0)S→S (1)S→BB (2)B→bB (3)B→a LR(1)分析表为: 状 态 action goto b a # S B 0 S3 S4 1 2 1 acc 2 S6 S7 5 3 S3 S4 8 4 r3 r3 5 r1 6 S6 S7 9 7 r3 8 r2 r2 9 r2 I3和I6,I4和I7,I8和I9分别为同心集,将同心集合并后为: I36:B→a·B,a/b/# B→·aB,a/b/# B→·b,a/b/# I47:B→b·,a/b/# I89:B→aB·,a/b/# 同心集合并后仍不包含冲突,因此该文法是LALR文法。 得到LALR分析表: 状态 action goto b a # S B 0 S3,6 S4,7 1 2 1 acc 2 S3,6 S4,7 5 3,6 S3,6 S4,7 8,9 4,7 r3 r3 r3 5 r1 8,9 r2 r2 r2 * * 高级语言能够完成的功能,汇编语言和机器语言也能够完成,但高级语言是面向程序员的,接近于人的思维,不需要考虑内存地址,汇编语言和机器语言面向机器。计算机只能识别和执行机器语言,那么是谁,如何将高级语言翻译为能够在计算机上执行的机器语言呢? 这就是编译程序 * * * * * * * * * * 统计信息,用于优化 * * * * * * * * * * * * *
文档评论(0)