簡體   English   中英

Backpatching是什么意思?

[英]What does Backpatching mean?

backpatching是什么意思? 請舉一個簡單的例子來說明。

返回修補通常是指解析已經在代碼中植入的前向分支的過程,例如在“if”語句中,當目標的值變得已知時,例如當遇到右括號或匹配'else'時。

在編譯器的中間代碼生成階段,我們經常需要對代碼中尚不存在的位置執行“跳轉”指令。 為了處理這種類型的情況,為該指令插入目標標簽。 生產規則中的標記非終結符導致語義操作被拾取。

在生成中間代碼時,一些語句(如條件語句,等等)將表示為一堆“if”和“goto”語法。 問題是,這些“goto”指令在開頭沒有有效的引用 (當編譯器開始逐行讀取源代碼時 - AKA 1st pass )。 但是,在第一次閱讀完整的源代碼之后,確定了這些“goto”指向的標簽引用

問題是我們可以讓編譯器能夠在一次通過中填充“goto X”語句中的X嗎? 答案是肯定的。

如果我們不使用反向修補,可以通過對源代碼進行2遍分析來實現。 但是,回調允許我們創建並保存一個專門為“goto”語句設計的單獨列表 因為它只在一次傳遞中完成,所以第一次傳遞不會填充“goto X”語句中的X,因為comipler乍一看不知道X的位置 但是,它確實將X存儲在該獨占列表中,在完成整個代碼並找到X之后X被該地址或引用替換。

Backpaching是為goto指令留下空白條目的過程,其中目標地址在第一遍中的前向傳輸中是未知的,並且在第二遍中填充這些未知。

Backpatching:語法定向定義可以在兩個或多個過程中實現(我們有合成屬性和繼承屬性)。

首先構建樹。

以深度優先順序走樹。

一次通過代碼生成的主要困難是,當我們為控制語句流生成代碼時,我們可能不知道分支的目標

Backpatching是解決這個問題的技巧。 使用空目標生成分支指令當目標已知時,請填寫分支指令的標簽(反向修補)。

backpatching是一個過程,其中包含前向引用的指令的操作數字段最初保持空白。 當在程序中遇到其定義時,前向引用符號的地址被放入該字段。

返回修補是在代碼生成過程中使用適當的語義表達式填充標簽的未指定信息的活動。

它由以下人員完成:

  1. 布爾表達式。
  2. 控制聲明流程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM