找到 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) 中。在… 閱讀更多

廣告
© . All rights reserved.