- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
(3)。识别活前缀DFA的初态构成:将S‘→·S项目放入对应初态的项目集I0中,求CLOSURE(I0)。设有已求出的某状态Ii,对每一个文法符号X,若Ii中有形如A-α·Xβ的项目,则当识别出X时,进入一个状态IJ,将I0中所有形如A-α·Xβ的项目变为形如A-αX·β的项目放入IJ中,求CLOSURE(IJ)。若IJ状态与一个已经求出的状态相同,则只保留一个,从Ii向IJ引一条矢线,标记为X,重复这个过程直到无法得到新的状态为止。分析表的构造:设GO为识别活前缀DFA的状态转换(a)。对每一个状态Ii,考察形如A-α·Xβ的项目,若GO[Ii,X]=Ij,且当X为终结符a时,置ACTION[i,a]=sj,表示移进动作并转入状态j;若X为非终结符,仅置GOTO[Ii,X]=j。(b)。若A→α·属于Ii,设A→α为文法的第j个产生式,则对文法的任意终结符和#(记为a)置ACTION[i,a]=rj,表示在i状态下可用产生式j对栈顶已出现的句柄进行归约。(C)。若S‘→S·属于状态i,则置ACTION[i,#]=acc。表示归约成功。(d)。凡不能按上诉过程添入的表格单元置为ERROR。5.1.5预测分析方法预测分析方法是自顶向下分析的一种方法,一个预测分析器由三个部分组成。 (!)预测分析程序 (2)先进后出栈 (3)预测分析表 其中只有预测分析表与文法有关。分析表可由一个矩阵M表示。矩阵的元素M[A,a]中的下标A表示非终结符,a为终结符或句子括号“#”,矩阵元素M[A,a]中的内容为存放着一条关于A的产生式,表明当用非终结符A向下推导时,面临输入符a时,所应采取的候选产生式,当元素内容无产生式时,则表面用A为左部向下推导是遇到了不该出现的符号,因此元素的内容为转向出错处理的信息。预测分析表的构造: 对每一个终结符或“#”号(用a表示),设某个产生式A→α,若a∈FIRST(α),或ε∈FIRST(α),但a∈FOLLOW(A),则把A→α放入M[A,a]中。构造完成后,若矩阵中不存在一个元素拥有两条产生式,则文法为LL(1)文法,可以用预测分析法进行分析。分析器的工作过程: 分析开始时,首先将“#”和文法开始符S放入分析栈中。当分析到了某一步时,设栈顶的符号为X,余留输入符号串的首字符为a:a)当X为终结符(不为“#”)时,比较X与a,若相等,将X弹出,扫视余留输入符号串的下一个字符,继续工作,否则输入符号串有错。b)当X为非终结符时,用(X,a)查分析表,若表中相应元素为某一产生式X→α,则将X从栈中弹出,并将α符号串按反序放入分析栈中,继续工作。若表中相应元素为出错,则调用出错处理程序进行分析或宣布分析失败。c)若X=a=“#”,则表明输入符号串已完全得到匹配,分析成功,结束工作。5.1.6非LL(1)文法的改造并非所有的非LL(1)文法均可改造成LL(1)文法,我们只给出一些简单的讨论。对于某些非LL(1)文法可以采用提取左因子的方法加以解决。例如: A→αβ1|αβ2|......|αβm拥有此种产生式的文法一定是非LL(1)文法,但我们可以将该产生式通过提取左因子改写为: A→αA‘,A‘→β1|β2|......|βm几个结论:(1)任何LL(1)文法都是无二义性的文法。(2)左递归文法必然不是LL(1)文法。(3)存在一种算法,它能判定任意的文法是否为LL(1)文法。(4)存在一种算法,它能判定任意两个LL(1)文法是否产生相同的语言。(5)不存在这样的算法,它能判定任意的前后文无关语言是否为LL(1)语言。(6)非LL(1)语言是存在的5.2自底向上的语法分析
自底向上的语法分析需要解决的问题是如何在归约过程中发现句柄。5.2.1简单优先分析法
该方法的基本思路:试图在文法的符号之间建立归约时的优先顺序,以保证扫视相连的两个符号时,能确定哪个先归约还是一起归约。这种优先顺序很显然只能从产生式中求的。如果在两个符号之间发现不只一种优先顺序时,那么很显然这种方法对该文法是不适用的简单优先关系的定义:设有一文法G[S]=(VN,VT,P,S),G[S]的某一句型α=...sisj...(1).若si在句柄中,sj不在,则很明显si为句柄尾,G中有A→...si,即说明si优于sj记为sisj,sj出现在句柄右端,故sj∈VT,(2).si,sj同在句柄中,则G中有A→...sisj...,使si,sj同时归约,si,sj有相同的优先关系,记为si=sj。(3).sj在句柄中,si不在,则sj为句
原创力文档


文档评论(0)