簡體   English   中英

編譯器中間代碼生成三個地址代碼fjump

[英]Compiler intermediate code generation three address code fjump

這種情況下FJUMP是什么意思?

以下是寄存器機的三地址代碼(TAC)中間表示形式:它包含一個名為foo的函數,該函數采用一個整數參數n和一個參數a ,該參數a是整數數組。 用類似Java的偽代碼寫下高級語言副本。

 label Foo: res = 1 i = 1 label BAR: t1 = i LEQ n a[1] = res i = i ADD 1 res = res MUL i JUMP BAR label BAZ: 

我認為三個地址代碼中的跳轉指令類似於“ if x goto L”嗎?

相關摘錄為:

t1 = i LEQ n
FJUMP t1 BAZ

我的意思是“如果i小於或等於n ,則跳至BAZ ”。 因此, FJUMP確實確實表示有條件的跳轉(在閱讀時,請FJUMP插入“ if”和“ goto”部分!)。

您必須了解三地址代碼不是一種語言 它是一具有相似特征的中間表示(語言),與面向對象或功能性語言的類別相同。 作為編譯器開發人員, 如果您選擇使用這種中間表示形式,則必須設計三個地址的代碼。


順便提一句,我覺得編譯器理論的學生傾向於按字面意義閱讀他們的教科書。 如果您看一堆相當現代的編譯器,您可能會發現重復出現的模式,但是它們在細節上往往有很大的不同。

暫無
暫無

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

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