找到 138 篇文章 關於編譯器設計

考慮語法 S → CC C → cC | d 構建 LALR(1) 解析器的解析表。

Ginni
更新於 2021年11月2日 11:56:06

6K+ 次瀏覽

解決方案步驟1 - 構建 LR(1) 專案集。首先,應生成所有 LR(1) 專案集。在這些狀態中,狀態 I3 和 I6 可以合併,因為它們具有相同的核心或第一部分,但後視符的第二部分不同。同樣,狀態 I4 和 I7 也相同。同樣,狀態 I8 和 I9 也相同。因此,I3 和 I6 可以組合成 I36。I4 和 I7 組合成 I47。I8 和 I9 組合成 I89。因此,狀態將是∴ I3 = goto(I0, c) 但 I3、I6 組合成 I36 ∴ I36 = ... 閱讀更多

什麼是 LALR(1) 解析器?

Ginni
更新於 2021年11月2日 11:50:29

4K+ 次瀏覽

LALR 解析器是前瞻 LR 解析器。它的功能介於 SLR 和 CLR 解析器之間。它是 CLR 解析器的壓縮版本,因此在此獲得的表將比 CLR 解析表更小。這裡,首先,我們將構建 LR(1) 專案。接下來,我們將查詢具有相同第一部分的專案,並將它們合併以形成單個專案集。這意味著狀態具有相同的第一部分,但不同的第二部分可以整合到單個狀態或專案中。例如。假設如果 I4:C → d ∙,c ... 閱讀更多

查詢語法的規範解析表 (CLR) 或 LR(1) 解析表。S → CC C → cC | d

Ginni
更新於 2021年11月2日 11:46:03

6K+ 次瀏覽

解決方案步驟1 - 構造增廣文法(0) S′ → S(1) S → CC(2) C → cC(3) C → d。步驟2 - 查詢閉包和 goto 以構造 LR(1) 專案。對 I7、I8、I9 應用 goto 在 I7、I8、I9 中,我們有產生式 C → d ∙,$,c → cC ∙,c | d 和 ∙ C → cC ∙,$,即點無法進一步移動。因此,goto 不能應用於 I7、I8、I9。繪製 DFA 首先,10 個狀態,即 I0 到 I9 將作為 DFA 的節點。使用 goto 語句連線邊。例如,goto(I0, S) = I1 ∴ ... 閱讀更多

什麼是 CLR(1) 解析器?

Ginni
更新於 2021年11月2日 11:27:48

5K+ 次瀏覽

CLR 定義規範前瞻。CLR 解析使用 LR(1) 專案的規範集合來構造 CLR(1) 解析表。CLR(1) 解析表與 SLR(1) 解析相比,狀態數更多。在 CLR(1) 中,它只能在後視符中找到歸約節點。CLR 解析器的執行方式為語法的 LR(1) 專案集合的構建它需要三件事增廣文法閉包函式goto 函式增廣文法 它是一個新的文法 G′,它包含一個新的產生式 S′ → S,以及給定文法 G 的所有其他產生式。閉包過程 closure(I)begin Repeat for each item A → ... 閱讀更多

為以下文法構造 SLR 解析表。此外,解析輸入字串 a * b + a。

Ginni
更新於 2021年11月2日 11:25:43

36K+ 次瀏覽

描述 - 考慮文法 E → E + T | T T → TF | F F → F * | a | b。解決方案步驟1 - 構造增廣文法並編號產生式。(0) E′ → E(1) E → E + T(2) E → T(3) T → TF(4) T → F(5) F → F ∗(6) F → a(7) F → b。步驟2 - 查詢閉包和 goto 函式以構造 LR(0) 專案。方框代表新狀態,圓圈代表重複狀態。FOLLOW 的計算我們可以找出 FOLLOW(E) = {+, $} FOLLOW(T) = {+, a, b, $} FOLLOW(F) = {+, *, a, b, $} 輸入字串 a * b + a 的解析 - 堆疊 ... 閱讀更多

為以下文法構造 SLR(1) 解析表:S → xAy | xBy | xAz A → qs | q B → q

Ginni
更新於 2021年11月2日 11:14:16

3K+ 次瀏覽

解決方案步驟1 - 構造增廣文法(0) S′ → S(1) S → xAy(2) S → xBy(3) A → qS(4) A → q(5) B → q步驟2 - 查詢閉包和 goto 函式以構造 LR(0) 專案。此處方框代表新狀態,圓圈代表重複狀態。步驟3 - FOLLOW 的計算S → xAy FOLLOW(S) = {$} (1)應用 FOLLOW 的規則 (2a)。將 S → xAy 與 A → ... 閱讀更多

證明每個 SLR(1) 都是無歧義的,但有些無歧義的文法不是 SLR(1)。檢查以下產生式:S → L = R S → R L → * R L → id R → L

Ginni
更新於 2021年11月2日 11:04:51

3K+ 次瀏覽

解決方案步驟1 - 首先,將其轉換為增廣文法 G′ 並對產生式進行編號(0) S′ → S(1) S → L = R(2) S → R(3) L →∗ R(4) L → id(5) R → L步驟2 - 查詢閉包和 goto 函式以構造 LR(0) 專案。在以下 LR(0) 專案集中,方框代表新狀態,圓圈代表重複狀態步驟3 - FOLLOW 的計算 - 應用 FOLLOW 的規則 (1),我們得到 FOLLOW(S) = $ (1)S ... 閱讀更多

在編譯器設計中,SLR、CLR 和 LALR 解析器之間有什麼區別?

Ginni
更新於 2021年11月2日 11:00:27

53K+ 次瀏覽

SLR 解析器SLR 代表“簡單 LR 解析器”。它執行起來非常簡單且經濟高效。SLR 解析動作和 goto 函式來自識別可行字首的確定性有限自動機。它不會為所有文法專門定義解析動作表,但在幾種程式語言的文法上會成功。給定一個文法 G。它擴充 G 以生成 G’,並從 G’ 中構造 C,即 G’ 的規範專案集集合。它可以使用以下簡單的 LR 解析表從 C 構造 ACTION 解析動作函式和 GOTO goto 函式 ... 閱讀更多

如何填充解析表中的條目?

Ginni
更新於 2021年11月2日 10:51:02

334 次瀏覽

解析器是編譯的第二階段。解析器將其輸入作為從上一階段(即詞法分析階段)生成的標記,並將它們組合起來,以便可以識別它們的語法。例如,考慮 I0 I0 - E′ → ∙ E E → ∙ E + T E → ∙ T T → ∙ T ∗ F T → ∙ F F → ∙ (E) F → ∙ id 填充移位條目在 SLR 解析表構建演算法的規則 (2a) 上應用於一組 ... 閱讀更多

為以下文法構造 SLR(1) 解析表:1. E → E + T 2. E → T 3. T → T * F 4. T → F 5. F → (E) 6. F → id

Ginni
更新於 2021年11月2日 10:49:31

853 次瀏覽

解決方案生成 SLR 解析表的步驟生成 LR(0) 專案的規範集合根據解析表演算法的規則 (2b) 計算 FOLLOW。FOLLOW 的計算根據 FOLLOW 的規則 (1) FOLLOW(E) = {$ } (1)E → E + T應用 FOLLOW 的規則 (2)即,將 E → E + T 與 A → αBβ 進行比較 E → E + T A → αBβ ∴ A = E,α = ε,B = E,β = +T ∵ 因為 FIRST(β) = FIRST(+T) = {+} 不包含 ε。∴ ... 閱讀更多

廣告
© . All rights reserved.