解决方案步骤 1 - 构造增广文法并对产生式编号 (0) E′ → E (1) E → E + T (2) E → T (3) T → T * F (4) T → F (5) F → (E) (6) F → id 步骤 2 - 对条目集应用闭包并查找 goto 方框代表新的状态或条目,圆圈代表重复的条目。因此,通过对 I0 应用 goto,I0 的所有规则都已完成。现在,以相同的方式对 I1、I2 应用 goto,然后继续。绘制 DFA 每个条目集都可以作为 DFA 的状态,即 I0、I1…… 阅读更多
解决方案FIRST 的计算 S → L = R ∵ L 不能导出 ε。根据 FIRST 的规则 (4b) ∴ FIRST(S) = {FIRST(L)} S → R ∵ R 不能导出 ε。根据 FIRST 的规则 (4b) ∴ FIRST(S) = {FIRST(R)} L → * R 应用 FIRST 的规则 (3) FIRST(L) = {* } … 阅读更多
文法 G 的 LR(0) 条目由一个产生式组成,其中在产生式的 RHS 中的某个位置插入了符号点(.)。例如 - 对于产生式 S → ABC,生成的 LR(0) 条目将是 - S →∙ ABC | S → A ∙ BC | S → AB ∙ C | S → ABC ∙ 产生式 S → ε 只生成一个条目,即 S →∙ 规范 LR(0) 集合有助于构建称为简单 LR(SLR) 分析器的 LR 分析器。要为文法创建规范 LR(0) 集合,需要三件事 - 增广文法 | 闭包函数 | goto 函数 增广文法 - 如果文法 G 的起始符号… 阅读更多
解决方案FIRST 的计算 A → b B ∴ FIRST(A) = {b} B → ε ∴ FIRST(B) = {ε} S → A a A 应用 FIRST 的规则 (4) 即,将 S → A a A 与 X → Y1Y2Y3 进行比较 ∴ FIRST(S) = FIRST(A a A) = FIRST(A) = {b} ∴ FIRST(S) = {b} S → B b B ∵ FIRST(B) 包含 ε 或 B 导出 ε ∴ 应用规则 (4c) ∴ FIRST(S) = FIRST(B to B) ∴ FIRST(S) = FIRST(B) - {ε} ∪ FIRST(bB) ∴ FIRST(S) = FIRST(B) - {ε} ∪ {b} = {ε} - {ε} ∪ {b} = {b} ∴ FIRST(A) = {b} FIRST(B) … 阅读更多
FIRST 和 FOLLOW 是与文法相关的两个函数,它们帮助我们填充 M 表的条目。FIRST() - 它是一个函数,它给出从产生式规则导出的字符串开头的终结符集。当且仅当 α ⇒ cβ(对于某个语法符号序列 β)时,符号 c 位于 FIRST(α) 中。当且仅当存在从文法的起始符号 S 的推导,使得 S ⇒ αNαβ(其中 α 和 β 是(可能为空的)语法符号序列)时,终结符 a 位于 FOLLOW(N) 中。在… 阅读更多