150 likes | 351 Views
自底向上分析- LR 分析概述. 自底向上分析的思想和主要问题 几种 LR 分析方法: LR(0) SLR(1) LR(1) LALR(1). 主要内容: LR 的几个基本概念 线性正则式的状态机 LRSM. 短语: 设 S 是文法的开始符, 是句型(即有 S * ), 如果满足条件: S * A A + 则称 是句型 的一个短语。 直接短语(简单短语): 如果满足条件: S * A A 则称 是句型 的一个简单短语。
E N D
自底向上分析-LR分析概述 • 自底向上分析的思想和主要问题 • 几种LR分析方法: LR(0) SLR(1) LR(1) LALR(1)
主要内容: LR的几个基本概念 线性正则式的状态机LRSM
短语:设S是文法的开始符,是句型(即有S *),如果满足条件: • S * A • A + • 则称是句型的一个短语。 • 直接短语(简单短语):如果满足条件: • S * A • A • 则称是句型的一个简单短语。 • 句柄:一个句型可能有多个简单短语,其中最左的简单短语称之为句柄。
一个有用的定理 • 定义:由某一结点及其所属分支组成的部分树称为原树的一颗子树。只有单层分支的子树称为简单子树。 • 定理: • 1.每个句型都有一颗语法树,每个语法树的叶组成一句型。 • 2.每棵子树的叶组成短语,每颗简单子树的叶组成简单短语,最左简单子树的叶组成句柄。
E E T + T F T F * F i ( E ) E + T F T i • 句型:(T+i)*i+F • 短语: 1.(T+i)*i+F 2.(T+i)*i 3.(T+i) 4.T+i 5.T 6.第一个i 7.第二个i 8.F • 简单短语: T,第一个i,第二个i,F • 句柄:T
规范句型:用最右推导导出的句型(也称右句型)。 • 规范前缀:若存在规范句型,且是终极符串或空串,则称为规范前缀。 • 规范活前缀:若规范前缀不含句柄或含一个句柄并且具有形式=(是句柄),则称规范前缀为规范活前缀(简称活前缀)。 • 归约规范活前缀:若活前缀是含句柄的活前缀,即有=,且是句柄,则称活前缀为归约规范活前缀(简称归约活前缀)。
逆过程:(分析栈,输入流) ( -, abbcde) (a,bbcde) (ab,bcde) (aA,bcde) (aAb,cde) (aA,cde) (aAc,de) (aAcd,e) (aAcB,e) (aAcBe,-) (S,-) 例:S aAcBe [1] A b [2] A Ab [3] B d [4] 输入流:abbcde。 规范推导过程为: S aAcBe[1] aAcd[4]e[1] aAb[3]cd[4]e[1] ab[2]b[3]cd[4]e[1]
活前缀的描述性定义:形成可归前缀之前,包括可归前缀在内所有规范句型的前缀都称为活前缀。活前缀的描述性定义:形成可归前缀之前,包括可归前缀在内所有规范句型的前缀都称为活前缀。 • 活前缀为一个或若干规范句型的前缀。 • 在规范归约过程中的任何时刻已分析过的部分,即在分析栈(符号栈)中的符号串均为规范句型的活前缀,表明输入串的已被分析过的部分是该文法某规范句型的一个正确部分。
线性正则式状态机-LRSM • 线性正则式:不含*符号的正则表达式 • LRSM:(Linear Regular States Machine) (1)从LRSM可构造出恰好接受给定所有正 则式的确定自动机DA; (2)从LRSM的终止状态可判定接受的是哪 个正则式; (3)从LRSM的状态可判定一个正则式是不 是另一正则式的前缀。
项目:假设[P]是一个正则式,则我们称形如[P]的表示为项目,其中P是正则式编号。其中黑点可出现于任何位置上。 • 项目集:用IS表示 • IS(X): SubItems(IS,X)= {X[P]|X[P]IS,XSymbSet} 简记为IS(X)
假设有线性正则项集: IS = {abd[1],abc[2],bc[3],de[4], dec[5]}, 则有 : IS(a) = { abd[1], abc[2] } IS(b) = { bc[3] } IS(c) = { dec[4] }
线性正则式到LRSM的构造 给定正则式集{1,2,…n}: ■构造初始项目集IS0={1[1],...,n[n]},并给IS0标上NO(表示未处理)。 ■从已构造的LRSM部分图选择被标为NO的任一项目集ISi,并做下面动作: [1] 对每个符号XSymbSet: 若ISiX非空,给ISiX标上NO,并在ISi和ISiX之间 画有向X边:ISi→ISiX。 [2] 给ISi标上OK。 ■重复上述步骤二,直至在LRSM中没有被标记为NO的 状态(项目集)结点为止。
S0 S1=S0a S3 S6 c •abc[1] •abd[2] •ad[3] •bec[4] •bed[5] a•bc[1] a•bd[2] a•d[3] b ab•c[1] ab•d[2] abc•[1] a S7 d abd•[2] S4 d ad•[3] b S2 S5 c S8 b•ec[4] b•ed[5] be•c[4] be•d[5] e bec•[4] S9 d bed•[5] 正则式到LRSM的转换例
LRSM的性质 • 展望符:Lookup(S) • 有效前缀集Prefix(S) • 状态Si中的项目•[P]表示部分已被输入,而且是Si的前缀的后缀,表示待输入部分。 • 可构造接受给定正则式集合的DA • 严格前缀:某状态中既含有定位点在尾处的项目又含有定位点不在尾处的项目,则一个正则式是另一个正则式的严格前缀。
作业: • 书 Page129 习题 7、8 • 文法G[E]: • E T | E + T • T F | T * F • F ( E ) | i i (1) *i (2) +i (3)是G的一个句子, (1)画出该句子的语法分析树 (2)给出该句子的所有短语,简单短语,句柄