한국   대만   중국   일본 
3-어드레스 코드 - 위키百科, 우리 모두의 百科事典 本文으로 移動

3-어드레스 코드

위키百科, 우리 모두의 百科事典.

3-어드레스 코드 (Three-address code)는 컴파일러 에서 使用되는 中間 言語 의 한 種類로, 컴파일러 最適化 를 實現하는데 使用된다. '3-어드레스'로 불리는 것은 2個의 入力用과 1個의 出力用 메모리 住所 或은 레지스터 를 指定하는 形式이기 때문이다.

槪要 [ 編輯 ]

3-어드레스 코드의 各 命令은 命令코드, 오퍼랜드1, 오퍼랜드2, 結果의 4- 튜플 形態로 表現된다. 이는 다음과 같은 一般 式으로 表現할 수 있다.

여기서 x , y , z 는 變數나 常數, 或은 컴파일러에서 生成한 一時 變數가 될 수 있다. op 은 命令 코드이며, 算術演算에 該當한다. 여러個의 演算으로 構成된 다음과 같은 式이 있다고 하자.

이 式은 이대로는 3-어드레스 코드로 表現할 수 없으므로, 다음과 같이 2個의 命令으로 分解하여 表現할 수 있다.

3-어드레스 코드를 改良한 形態로 政敵 單一 大入 (SSA)가 있다.

[ 編輯 ]

 int
 main
(
void
)

 {

     int
 i
;

     int
 b
[
10
];

     for
 (
i
 =
 0
;
 i
 <
 10
;
 ++
i
)
 {

         b
[
i
]
 =
 i
*
i
;

     }

 }

위의 C言語 코드를 다음의 3-어드레스 코드로 變換할 수 있다.

      i := 0                  ; 大入
L1:  if i < 10 goto L2       ; 條件 分期
      goto L3                 ; 無條件 分期
L2:  t0 := i*i
     t1 := &b                ; 年産 對象 어드레스
      t2 := i << 2            ; b는 정수형 配列이므로 
오프셋
은 i*4(=i<<2)바이트
      t3 := t1 + t2           ; t3에는 b[i]의 어드레스가 設定됨
      *t3 := t0               ; 
포인터
를 利用하여 貯藏
      i := i + 1
      goto L1
L3:

같이 보기 [ 編輯 ]

外部 링크 [ 編輯 ]