找到 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 + TE → TT → T * FT → FF → (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 = RS → RL →* RL → idR → L

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

1K+ 浏览量

解决方案FIRST 的计算S → L = R∵ L 不推导出 ε。根据 FIRST 的规则 (4b)∴ FIRST(S) = {FIRST(L)}                                                  (1)S → R∵ R 不推导出 ε。根据 FIRST 的规则 (4b)∴ FIRST(S) = {FIRST(R)}                                                 (2)L →* R应用 FIRST 的规则 (3)FIRST(L) = {*}                   ... 阅读更多

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

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

5K+ 浏览量

文法 G 的 LR(0) 项目由一个产生式组成,其中符号点 (.) 插入到产生式右部的某个位置。例如 - 对于产生式 S → ABC,生成的 LR(0) 项目将是 -S →∙ ABCS → A ∙ BCS → AB ∙ CS → ABC ∙产生式 S → ε 只生成一个项目,即 S →∙规范 LR(0) 集合有助于构建称为简单 LR (SLR) 分析器的 LR 分析器。要为文法创建规范 LR(0) 集合,需要 3 个要素 -增广文法闭包函数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 BA → b BB → ε

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 到 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) 中。在 ... 阅读更多

广告