找到 138 篇文章 关于编译器设计

什么是 SLR(1) 分析器?

Ginni
更新于 2021年11月2日 10:35:47

6K+ 次浏览

SLR 代表“简单 LR 分析器”。它执行起来非常简单且经济。但它无法为某些类别的语法创建分析表,这就是为什么使用 CLR 和 LALR 的原因,它们主要实现了所有类别或类型的语法。它构建分析表,有助于执行输入字符串的分析。SLR(1) - 具有 SLR 分析表的语法被称为 SLR(1)。SLR 分析器的运行:如果给出上下文无关文法,则可以进行 SLR 分析。在 LR(0) 中,0 表示没有前瞻符号。LR(0) 条目的规范集合 LR(0) … 阅读更多

找到文法 E → E + T | E → T | T → T * F | T → F | F → (E) | F → id 的 LR(0) 条目集的规范集合。

Ginni
更新于 2021年11月2日 10:23:03

3K+ 次浏览

解决方案步骤 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 和 FOLLOW:S → L = R | S → R | L → * | L → id | R → L

Ginni
更新于 2021年11月2日 09:55:41

1K+ 次浏览

解决方案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) = {* } … 阅读更多

在编译器设计中,什么是 LR(0) 条目的规范集合?

Ginni
更新于 2021年11月1日 13:40:25

5K+ 次浏览

文法 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 的起始符号… 阅读更多

什么是 LR 分析器?

Ginni
更新于 2021年11月1日 12:39:44

2K+ 次浏览

LR 分析器是一类自下而上的分析器,用于分析上下文无关文法。LR 分析称为 LR(K) 分析,其中 L 代表输入的从左到右扫描,R 代表最右推导,K 是在制定分析决策时使用的前瞻输入符号的数量。LR 分析器是一个移进-规约分析器,它使用确定性有限自动机,通过从下向上读取堆栈来识别所有适用前缀的集合。它决定哪个句柄(如果有)是可行的。右句型的一个可达前缀是这样的前缀,它包含一个句柄…… 阅读更多

回溯和非回溯有什么区别?

Ginni
更新于 2021年11月1日 12:36:09

2K+ 次浏览

带有回溯的自顶向下分析 在带有回溯的自顶向下分析中,分析器将尝试多个规则或产生式,通过在推导的每一步回溯来发现与输入字符串的匹配。因此,如果使用的产生式没有给出所需的输入字符串,或者它与所需的字符串不匹配,那么它可以撤消该移位。没有回溯的自顶向下分析 由于回溯看起来更强大,我们可以选择不同的备选方案。但是,回溯不能轻易地应用或实现到分析中。没有回溯的自顶向下分析有两种类型,如下所示 - 递归下降分析器 | 预测分析器 递归下降… 阅读更多

找到以下文法的 FIRST 和 FOLLOW:E → TE′ | E′ → +TE′ | ε | T → FT′ | T′ → *FT′ | ε | F → (E) | id

Ginni
更新于 2021年11月1日 12:27:42

5K+ 次浏览

解决方案FIRST 的计算 E → TE′ 应用 FIRST 的规则 (4b) 由于 FIRST(T) 不包含 ε,或者 T 不能导出 ε。∴ FIRST(E) = FIRST(TE′) = FIRST(T) ∴ FIRST(E) = {FIRST(T)} (1) E → +TE′ | ε 应用 FIRST 的规则 (3) 将 E′ → +TE′ 与 X → aα 进行比较 ∴ FIRST(E′) = {+} 对 E′ → ε 应用规则 (2) FIRST(E′) = {ε} ∴ FIRST(E′) = {+, ε} (2) T → FT′ 应用 FIRST 的规则 (4b) 由于 FIRST(F) 不能导出 ε ∴ FIRST(T) = FIRST(FT′) = FIRST(F) ∴ FIRST(T) = {FIRST(F)} (3) T′ → *FT′ | ε 与 FIRST 的规则 (2) 和 (3) 进行比较,我们得到 ∴ FIRST(T′) = {ε, *} (4) F → (E) | id 与 FIRST 的规则 (3) 进行比较 ∴ FIRST(F) = {(,… 阅读更多

为以下文法构造一个预测分析表,并检查字符串 id + id * id 是否被接受。

Ginni
更新于 2023年11月8日 00:08:09

33K+ 次浏览

问题 - 考虑以下文法 - E → TE′ | E′ → +TE′ | ε | T′ → FT′ | T′ → FT′ | ε | F → (E) | id 解决方案 - 步骤 1 - 消除左递归并执行左析取 由于文法中没有左递归,因此我们将继续进行。此外,不需要左析取。步骤 2 - FIRST 的计算 FIRST(E) = FIRST(T) = FIRST(F) = {(, id} FIRST(E′) = {+, ε} FIRST(T′) = {*, ε} 步骤 3 - FOLLOW 的计算 FOLLOW(E) = FOLLOW(E′) = {), $} FOLLOW(T) = FOLLOW(T′) = {+, ), $} FOLLOW(F) =… 阅读更多

找到以下文法的 FIRST 和 FOLLOW。S → A a A | B b B | A → b | B → ε

Ginni
更新于 2021年11月1日 11:40:07

786 次浏览

解决方案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,以及如何计算它们?

Ginni
更新于 2021年11月1日 11:29:30

54K+ 次浏览

FIRST 和 FOLLOW 是与文法相关的两个函数,它们帮助我们填充 M 表的条目。FIRST() - 它是一个函数,它给出从产生式规则导出的字符串开头的终结符集。当且仅当 α ⇒ cβ(对于某个语法符号序列 β)时,符号 c 位于 FIRST(α) 中。当且仅当存在从文法的起始符号 S 的推导,使得 S ⇒ αNαβ(其中 α 和 β 是(可能为空的)语法符号序列)时,终结符 a 位于 FOLLOW(N) 中。在… 阅读更多

广告