- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第7章 LR分析法 7.1 LR分析法概述 7.2 LR(0)分析 7.3 SLR(1)分析 7.4 LR(1)分析 7.5 LALR(1)分析 7.6 二义性文法 7.1 LR分析 LR分析方法是当前最被广泛应用的无回溯的“移进-归约”方法。 LR(k)分析技术:这里的“L”是指从左至右扫描输入符号串,“R”是指它的归约过程是最右推导的逆过程,即规范归约,“k”是指为了作出分析决定而向前看的输入符号的个数。 7.1 LR分析 LR分析器的构造和工作过程 (此处略) 7.2 LR(0)分析 LR(0)分析法:能力最弱,理论上最 重要 活前缀 识别活前缀的DFA如何构造 (LR(0)项目集规范族的构造) LR(0)分析表的构造 LR(0)分析法的实现 活前缀 G =(Vn,Vt ,P,S),若有 S’?αAω?αβω, γ是αβ的前缀,则称是文法G的活前缀。包 含了句柄的活前缀称为可归前缀。 构造识别活前缀的DFA 基本思想:构造LR(0)项目集规范族(构成 识别活前缀的DFA的全体状态) (1) LR(0)项目 在文法中每个产生式的右部的某一个适当位置 添加一个圆点构成项目 例: A? aBc A?.aBc A?a.Bc A?aB.c A?aBc. LR(0)项目分类: 根据圆点所在的位置和圆点后是终结符还是非终结符 或为空把项目分为以下几种: 移进项目,形如 A—??a?,a是终结符, ? ,??V* 待约项目,形如 A —??B?, B是非终结符 归约项目,形如 A — ?? 接受项目,形如 S’—S?, S’→S 是拓广文法得到新产生式 规定:A→ε的LR(0)项目只有A→ ? 是归约项目 构造识别活前缀的DFA(续) (2) LR(0) 项目集的闭包 若当前项目集包含A — α?Xβ项目,该项目刻 画的状态是期望移进First(X)中的某些符号, 假如有产生式X—u,那么有项目X—.u,这个项 目也是刻画期望移进First(X)中的某些符号的情况。 由于这两个项目刻画的是相同的状态,因此,将 这两个项目合并一个项目集。 设I是文法G的一个LR(0)项目集合,closure(I) 是从I出发用下面三个规则构造的项目集: I中每一个项目都属于closure(I); 若项目A→α·Bβ?closure(I),且B→γ?P 则将B →·γ加进closure(I)中; 复执行(2)直到closure(I)不再增大为止。 例 对拓广文法G[S’]: (0) S’→S (1) S→aA (2) S→bB (3) A→cA (4) A→d (5) B→cB (6) B→d I={S’→.S} closure(I)={S’→.S, S→.aA, S→.bB} 构造识别活前缀的DFA(续) (3) 状态转移函数 若I是G的一个LR(0)项目集, X?{VT?VN} GO(I,X)=closure(J) 其中,J={A→αX·β|当A→α·Xβ?I} ,项目 A→αX·β称为A→α·Xβ的后继。 例 对拓广文法G[S’]: (0) S’→S (1) S→aA (2) S→bB (3) A→cA (4) A→d (5) B→cB (6) B→d I={S’→.S,S→.aA, S→.bB} GO(I,a)={S→a.A, A→.cA, A→.d} (4) 计算LR(0)项目集规范族 C={I0,I1, ...,In} Procedure itemsets(G’); Begin C := { CLOSURE ({S’?.S})} Repeat For C 中每一项目集I和每一文法符号x Do if GO(I,x) 非空且不属于C Then 把 GO(I,x) 放入C中 Until C 不再增大 End; DFA m=? ?VT∪VN ∪{ S ?}, Q?{ 项目集规范族 }, q0= closure{ S? → ?S }, Q , ?=GO(I,X) ) 它识别文法G的所有活前缀的自动机。 例:文法G[S]: (1) S→aA (2) S→bB (3) A→cA (4) A→d
文档评论(0)