syntax(4).ppt - (4 4.7 LR(1 LALR 1 E E =*id E E*id $ id1...

Info icon This preview shows pages 1–9. Sign up to view the full content.

View Full Document Right Arrow Icon
1 第四章 语法分析 (4) 4.7 LR(1) LALR
Image of page 1

Info iconThis preview has intentionally blurred sections. Sign up to view the full version.

View Full Document Right Arrow Icon
2 $ id 1 + id 2 * id 3 $ 移进 $id 1 + id 2 * id 3 $ E id 归约 $ E + id 2 * id 3 $ 移进 $ E + id 2 * id 3 $ 移进 $ E + id 2 * id 3 $ E id 归约 $ E + E * id 3 $ 移进 $ E + E * id 3 $ 移进 $ E + E *id 3 $ E id 归约 $ E + E * E $ E E * E 归约 $ E + E $ E E + E 归约 $ E $ 接受 + 输入 = 右句型 E+E *id E+E*id 出现在移进归约分析器栈中的右句型的前缀集合称为 可行前缀
Image of page 2
3 可以出现在移进归约分析器栈中的右句型的前缀称为 可行前缀 定义: 一个可行前缀是一个右句型的前缀,并且不含右句柄之后 的任何符号 例如:对于右句型 (E)*id, ( (E (E) 是可行前缀, (E)* 不是可行前缀 可行前缀后加上终结符可以得到右句型。 只有输入串中已分析过的那部分能归约成可行前缀,就没有语法错 误。 事实上, LR 0 )自动机是一个识别可行前缀的 DFA 产生式: F (E) | id 4.6.5 可行前缀( viable prefix 因为: * 在句柄 (E) 之后
Image of page 3

Info iconThis preview has intentionally blurred sections. Sign up to view the full version.

View Full Document Right Arrow Icon
4 识别 G 的所有可行前缀的 NFA 1. NFA 的状态是一个 LR(0) 项目。 2. 从每个形如 B · X 的状态出发画一条标记为 X 的弧到状态 B X · 3. 从每个形如 B · A 的状态出发画一条标记为 的弧到所有形如 A · 的状态。 这个 NFA 通过子集构造法得到的 DFA 和前面构 造的 LR(0) 自动机是相同的。
Image of page 4
5 例: p153 描述文法的可行前缀 S S S SS+ | SS* | a 文法的项目有: 1. S · S 2. S  S · 3. S · SS+ 4. S S · S+ 5. S SS · + 6. S SS+ · 7. S · SS* 8. S S · S* 9. S SS · * 10. S SS* · 11 S ·a 12. S
Image of page 5

Info iconThis preview has intentionally blurred sections. Sign up to view the full version.

View Full Document Right Arrow Icon
start S 1 2 3 7 S 4 S 5 11 S 8 S 12 识别可行前缀的 NFA + 6 9 * 10 a S S S SS+ | SS* | a 一个项目对应 NFA 的一个状态 1. S · S 2. S  S · 3. S · SS+ 4. S S · S+ 5. S SS · + 6. S SS+ · 7. S · SS* 8. S S · S* 9. S SS · * 10. S SS* · 11 S ·a 12. S 从每个形如 B · A 的状态出发画一 条标记为 的弧到所有形如 A · 的状
Image of page 6
7 S .S S .SS+ S .SS* S .a I 0 start S a 识别可行前缀的 DFA S S . S S. S+ S S. S* S .SS+ S .SS* S .a I 1 S a . I 2 S SS . + S SS . * S S. S+ S S. S* S .SS+ S .SS* S .a I 3 S a S SS +. I 4 S a S SS *. I 5 + *
Image of page 7

Info iconThis preview has intentionally blurred sections. Sign up to view the full version.

View Full Document Right Arrow Icon
8 有效项目 如果存在 一个最右推导 S Aw  1 2 w A 1 · 2 对可行前缀  1 是有效的 若项目 A 1 · B 2 对可行前缀  1 是有效的,且 B 是产生式,则 项目 B · 对可行前缀  1 也是有效的 据假设,存在一个最右推导 S * Aw  1 B 2 w 2 w * xw , 则对任何 B 有最右推导 S * Aw  1 B 2 w  1 Bxw  1 xw 所以 B .
Image of page 8
Image of page 9
This is the end of the preview. Sign up to access the rest of the document.