3-어드레스 코드 문서 원본 보기
←
3-어드레스 코드
둘러보기로 이동
검색으로 이동
문서 편집 권한이 없습니다. 다음 이유를 확인해주세요:
요청한 명령은 다음 권한을 가진 사용자에게 제한됩니다:
사용자
.
문서의 원본을 보거나 복사할 수 있습니다.
{{위키데이터 속성 추적}} '''3-어드레스 코드'''(Three-address code)는 [[컴파일러]]에서 사용되는 [[중간 언어]]의 한 종류로, [[컴파일러 최적화]]를 실현하는데 사용된다. '3-어드레스'로 불리는 것은 2개의 입력용과 1개의 출력용 [[메모리 주소]] 혹은 [[프로세서 레지스터|레지스터]]를 지정하는 형식이기 때문이다. == 개요 == 3-어드레스 코드의 각 명령은 명령코드, 오퍼랜드1, 오퍼랜드2, 결과의 4-[[튜플]] 형태로 표현된다. 이는 다음과 같은 일반 식으로 표현할 수 있다. :<math>x := y \, \operatorname{op} \, z\,</math> 여기서 ''x'', ''y'', ''z''는 변수나 상수, 혹은 컴파일러에서 생성한 일시 변수가 될 수 있다. ''op''은 명령 코드이며, 산술연산에 해당한다. 여러개의 연산으로 구성된 다음과 같은 식이 있다고 하자. :<math>p := x + y \times z\,</math> 이 식은 이대로는 3-어드레스 코드로 표현할 수 없으므로, 다음과 같이 2개의 명령으로 분해하여 표현할 수 있다. :<math>t_1 := y \times z\,</math> :<math>p := x + t_1\,</math> 3-어드레스 코드를 개량한 형태로 [[정적 단일 대입]] (SSA)가 있다. == 예 == <syntaxhighlight lang="C"> int main(void) { int i; int b[10]; for (i = 0; i < 10; ++i) { b[i] = i*i; } } </syntaxhighlight> 위의 [[C언어]] 코드를 다음의 3-어드레스 코드로 변환할 수 있다. <code> 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: </code> == 같이 보기 == * [[중간언어]] * [[RISC]] == 외부 링크 == * [https://web.archive.org/web/20080318210950/http://cs.wwc.edu/~aabyan/464/Quads.html Three-Address Code and Register Allocation] * [http://www.cs.arizona.edu/classes/cs453/fall07/DOCS/intcode.html CSc 453: A Three-Address Intermediate Code Instruction Set for C--] [[분류:컴파일러]] [[분류:명수 3]] [[분류:컴파일러 구성]]
이 문서에서 사용한 틀:
틀:위키데이터 속성 추적
(
원본 보기
)
3-어드레스 코드
문서로 돌아갑니다.
둘러보기 메뉴
개인 도구
로그인
이름공간
문서
토론
한국어
보기
읽기
원본 보기
역사 보기
더 보기
검색
둘러보기
대문
최근 바뀜
임의의 문서로
미디어위키 도움말
특수 문서 목록
도구
여기를 가리키는 문서
가리키는 글의 최근 바뀜
문서 정보