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

什麼是語法制導翻譯器的實現?

Ginni
更新於 2021年11月3日 11:16:49

2K+ 次檢視

語法制導翻譯方案是一個上下文無關文法,其中屬性與文法符號相關聯,語義動作包含在花括號 ({ }) 中。這些語義動作是由解析器在適當時間呼叫的子程式,用於進行翻譯。語義動作在產生式右邊的位置表示解析器實現它的時間。當它可以產生翻譯方案時,它應該提供一個屬性值在動作定義它時可用。這需要右側符號的繼承屬性…… 閱讀更多

什麼是語法制導翻譯方案的型別?

Ginni
更新於 2021年11月3日 11:13:02

4K+ 次檢視

語法制導翻譯方案有兩種型別:綜合翻譯在此翻譯中,產生式規則左側變數的值取決於產生式規則右側變數的值。例如,E → E(1) + E(2) {E.VAL = E(1).VAL + E(2).VAL}在此,產生式規則左側的 E 可以透過 E(1) 和 E(2) 的值之和來計算,E(1) 和 E(2) 位於產生式規則的右側,即左側變數取決於右側變數。在綜合翻譯中,節點上綜合屬性的值…… 閱讀更多

什麼是語法制導翻譯?

Ginni
更新於 2021年11月3日 11:03:56

7K+ 次檢視

在語法制導翻譯中,除了文法之外,它還可以識別一些非正式的符號,這些符號被稱為語義規則。在實現語義分析之後,源程式被修改為中間形式。中間程式碼生成階段需要一些資訊來將語義檢查的解析樹轉換為中間程式碼。但是,這些資訊或變數的屬性不能單獨由上下文無關文法表示。因此,必須將一些語義動作附加到上下文無關文法中,這有助於中間程式碼生成階段生成中間程式碼。因此,將屬性附加到變數…… 閱讀更多

為以下文法查詢 FIRST 和 FOLLOW:E → E + T | T T → T * F | F F → (E) | id

Ginni
更新於 2021年11月3日 10:58:27

8K+ 次檢視

解答FIRST 的計算E → E + T | T由於 FIRST(E) 不包含 ε。∴ FIRST(E) = FIRST(E + T) = FIRST(E)由於 E → T∴ FIRST(E) = {FIRST(T)} (1)T → T * F | F由於 FIRST(T) 不包含 ε 或 T 不能匯出 ε。∴ FIRST(T) = FIRST(T * F) = {FIRST(T)}由於 T → F (FIRST(T) = {FIRST(F)} (2)F → (E) | id∴ 根據 FIRST 的規則 (3)FIRST(F) = {(, id}…… 閱讀更多

在編譯器設計中,LR 解析器有哪些型別?

Ginni
更新於 2021年11月3日 11:52:15

9K+ 次檢視

LR 解析器有三種類型:簡單 LR 解析器 (SLR) - SLR 代表“簡單 LR 解析器”。它易於執行且成本效益高。但它無法為某些型別的文法建立解析表,這就是為什麼使用 CLR 和 LALR,它們主要實現了所有型別的文法。它構造解析表,有助於執行輸入字串的解析。如果給定上下文無關文法,則可以進行 SLR 解析。在 LR(0) 中,0 表示沒有前瞻符號。LR(0) 解析動作和從…… 閱讀更多

在編譯器設計中,LR 解析器的組成部分是什麼?

Ginni
更新於 2021年11月3日 13:19:30

958 次檢視

LR 解析器是一種自底向上解析器,用於解析上下文無關文法。LR 解析稱為 LR(K) 解析。LR 解析器是一種移進規約解析器,它利用確定性有限自動機,透過從下到上讀取棧來識別所有適用字首的集合。它決定是否有控制代碼可用。右句型的可行字首是包含控制代碼但不包含控制代碼右側符號的字首。因此,如果構造一個識別右句型可行字首的有限狀態機,…… 閱讀更多

什麼是 LR 解析表的實現?

Ginni
更新於 2021年11月3日 09:56:52

2K+ 次檢視

LR 解析表是一個二維陣列,其中每個條目代表一個動作或 goto 條目。具有大量產生式的程式語言文法具有大量狀態或專案,即 I0、I1……In。因此,由於狀態較多,將填充更多動作和 goto 條目,這需要大量記憶體。因此,二維陣列不足以儲存如此多的動作條目,因為每個條目至少需要 8 位來編碼。因此,我們必須使用比二維陣列更有效的編碼來編碼動作和 goto 欄位。例如,…… 閱讀更多

考慮模稜兩可的文法。E → E + E E → E * E E → (E) E → id (a) 為上述文法構造 LR(0) 專案。(b) 為文法構造 SLR 解析表。(c) 解析輸入字串 id + id * id。

Ginni
更新於 2021年11月3日 09:52:32

5K+ 次檢視

解答步驟 1 - 構造增廣文法(0) E′ → S(1) E → E + E(2) E → E * E(3) E → (E)(4) E → id步驟 2 - 查詢閉包和 goto 函式以構造 LR(0) 專案。閉包 (E′ → ∙ E) =在 I9 上應用 goto∵ 無法在 I9 上應用 goto,因為 E → (E). 中的點位於最後一個位置。步驟 3 - FOLLOW 的計算應用規則 (1) FOLLOWFOLLOW(B) = {$ } (1)E → E + E比較…… 閱讀更多

什麼是移進規約解析器?

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

12K+ 次檢視

移進規約解析器是一種自底向上解析器。它從葉子節點生成解析樹到根節點。在移進規約解析器中,輸入字串將被規約到起始符號。這種規約可以透過反向處理最右推導來產生,即從起始符號到輸入字串。移進規約解析器需要兩個資料結構輸入緩衝區棧移進規約解析的步驟如下:移進規約解析的步驟如下:它使用一個棧和一個輸入緩衝區。在棧的底部插入 $…… 閱讀更多

證明以下文法是 LR(1):S → A a | b A c | B c | b B a A → d B → d

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

6K+ 次檢視

解答步驟 1 - 構造增廣文法(0) S′ → S(1) S → A a(2) S → b A c(3) S → B c(4) S → b B a(5) A → d(6) B → d步驟 2 - 查詢閉包和 goto。構造一組 LR(1) 專案。這裡的方框都代表新的狀態。LR(1) 解析表因此,LR(1) 解析表沒有多個條目。文法是 LR(1)。LR(1) 或規範 LR 解析表的構造輸入 - 增廣文法 G′。輸出 - 規範 LR(1) 解析表方法填充“移進”條目 (s) - 應用 CLR 解析表構造的規則 (2a)。考慮…… 閱讀更多

廣告
© . All rights reserved.