9. 중간언어

Download Report

Transcript 9. 중간언어

9. 중간언어
9-1. 소개
9-2. Polish표기법
9-3. 3-주소 코드
9-4. 트리 구조 코드
9-5. 가상 기계 코드
9-6. 중간 언어의 선택
9-1. 소 개
www.themegallery.com
 중간 언어의 등장 배경


프로그래밍 언어의 다양화
컴퓨터 하드웨어의 급격한 발전
 많은 컴파일러 작성 요구
 컴파일러의 생산 기술도 빠르게 발전
 초창기의 컴파일러 : 단일 패스 컴파일러

2
원시 프로그램을 중간 코드 생산 없이 직접 목적
코드로 번역
www.themegallery.com
 중간언어 사용의 장점





3
컴파일러를 기능적으로 독립적인 여러 모듈들로 구성
컴파일러 자체의 이식성(portability) 증가
고급 원시 언어와 저급 목적 코드간의 의미적인 차이
를 이어주는 교량 역할을 중간 코드가 담당
 번역과정이 좀 더 쉽게 표현, 효율적 처리
중간 코드를 이용하여 최적화를 수행함으로써 기계와
독립적인 최적화가 가능
인터프리티브 컴파일링(interpretive compiling) 시스
템에서 인터프리터를 이용하여 실행
www.themegallery.com
 중간언어 형태에 따른 4 가지 부류
1. Polish 표기법 … Postfix 표현, IR
2. 3-주소 코드
… Triple, Quadruple, Indirect Triple
3. 트리 주소 코드 … AST, TCOL, DIANA
4. 가상 기계 코드 … P-코드, EM-코드, U-코드,
바이트코드, .NET IL
4
9-2. Polish표기법




www.themegallery.com
폴란드식 표기법으로 Lucasiewiez가 개발한 가장
오래된 중간 코드 형태
Fortran 컴파일러에서 산술 연산식을 위한 중간 코드로
사용
특히, Basic 같은 인터프리터에서 중간 코드로 많이 사용
prefix polish 표기법과 postfix polish 표기법
<예> 산술식 A = B + C *D / E에 해당하는 postfix 표현
ABCD*E/+=
5
9-3. 3-주소 코드( Three address code)
www.themegallery.com
 정의
: 중간 코드를 한 개의 연산자와 두 개의 피연산자
로 구성
<예> A := B op C
<예4> C 언어 문장 a = b * (c + d); 에 대한
3-주소 코드( p381| p359)
(t1 := c + d)
(t2 := b * t1)
(a := t2)
6
www.themegallery.com
 3-주소 코드

가장 널리 알려진 형태 : triple과 quadruple

차이점은 결과값을 갖는 피연산자의 유무

quadruple : 마지막 피연산자에 결과 값을 저장

triple : 그 자체에 값을 저장하여 triple 번호로 참조
<예 5> p382| p360 참조
7
9-4. 트리 구조 코드
www.themegallery.com
 정의


원시 프로그램의 트리 구조 표현은 프로그램의 의미를
보다 효율적으로 표현할 수 있는 방법
코드의 특성상 손쉽게 재구성이 가능
 최적화 컴파일러의 중간 언어로 가장 적합한 표현
 트리 구조 표현 방법
1. 파스 트리
2 . 추상 구문 트리( AST : Abstract Syntax Tree)
: 파스트리에서 불필요한 중복된 정보를 제거한 것
8
www.themegallery.com
 TCOL(Tree structured COmmon Language)




트리 형태를 갖는 중간 언어로 컴파일러의 후단부를
자동화하기 위한 여러 가지 명세에 이용
AST가 고급에 가까운 반면, TCOL은 비교적 중간 레벨
TCOL : AST에다 의미 분석한 결과를 반영한 트리
언어 종속 부분과 기계종속 부분을 분리하는데 유용
하게 사용
AST
Semantic Analyzer
 AST와 TCOL의 관계
<예 9> p388| p365 참조
9
TCOL
www.themegallery.com

TCOL 생성 과정
원시프로그램
스캐너
파서
AST
중간 코드
생성기
TCOL
Diana(Descriptive Intermediate Attributed
Notation for Ada)


컴파일러의 전단부와 후단부 사이의 정보 교환에
적당하게 설계된 Ada프로그램의 중간 형태
네 가지 속성
1.
2.
3.
10
4.
구조적 속성
어휘적 속성
의미적 속성
코드 속성
9-5. 가상 기계 코드 (p391| p368~ )
www.themegallery.com
포터블 컴파일러(portable and adaptable compiler)


11
컴파일러를 전단부 부분과 후단부 부분으로 분리,
잘 정의된 인터페이스를 사용하여
이 두 부분을 연결해 줌으로써
보다 이식 가능하고 적용 가능한 컴파일러
연결방법은 가상 기계를 설정,
이 기계의 명령어 집합을 중간 언어로 사용하여
전단부 부분과 후단부 부분을 연결하는 방법
www.themegallery.com
 포터블 컴파일러의 모델
원시프로그램
전단부
중간언어
후단부
목적 코드
가상 기계
인터프리터
실행
 가상 기계 코드의 종류
1.
2.
3.
4.
5.
12
P- 코드
EM-코드
U-코드
바이트 코드
.NET IL
목적 기계
실행
1) P-코드



13
www.themegallery.com
Pascal 컴파일러를 제작하는데 사용된 중간언어
Pascal-P 컴파일러는 Pascal 프로그램을 입력 받아
P-코드를 생성
P-기계는 스택 컴퓨터로 네 개의 특수 레지스터와
기억 공간으로 구성
1. PC-Program Counter
2. SP-Stack Pointer
3. MP-Mark Pointer
4. NP-New Pointer
2) EM-코드
www.themegallery.com
 ACK에서 중간 언어로 사용
 ACK(Amsterdam Compiler Kit)  14 장 참조




14
Algol 형태의 원시 언어와 byte machine 형태의 목적
기계에 적합한 EM-기계 설정
언어에 대한 전단부와 목적 기계에 대한 후단부 제공
 compiler 쉽게 제작, 컴파일러 자동화 도구
의사 명령어와 EM 명령어로 구분, 각 명령어는 상수,
명칭 등과 같은 피연산자를 갖을 수 있다.
의사 명령어
1. 기억 장소를 확보
2. 상수 정의를 위한 기능
3. 분리 컴파일이나 링킹에 관련된 기능을 수행
3) U-코드



Stanford 대학에서 제작한 포터블 Pascal 컴파일러에서
사용한 중간 형태로서 가상적인 스택 기계에 근거
P-코드에서 코드 최적화의 기능을 높이기 위해 확장된
중간언어
모든 변수에 대한 주소는 두 개의 투플(B, O)로 구성
1. B는 블록의 번호를 의미
2. O는 블록의 시작으로부터의 오프셋
<예 11> p397| p374
<예 12> p398| p375
15
www.themegallery.com
4) 바이트 코드(byte code)
www.themegallery.com




자바 프로그래밍 환경에서 지원하는 중간 언어
이 기종간의 실행 환경에 적합하게 설계된 스택 기반의
가상 기계 코드
자바 가상 기계(JVM : Java Virtual Machine)의 명령어
집합은 바이트 코드
인터프리터 방식과 JIT(Just-In-Time) 컴파일러 방식에
의해 실행
<그림 9.8> 자바 가상 기계
자바
프로그램
자바 컴파일러
<표 9.1> p409| p386
16
바이트
코드
JVM
<예 16> p410| p386
실행 결과
5) .NET IL
www.themegallery.com

.NET 환경에서 언어 통합을 위해 설계된 중간 언어

MSIL(Microsoft Intermediate Language)라고도 부름


17
.NET IL은 하드웨어 및 플랫폼에 독립적이고 실행은
JIT(Just-In-Time) 방법 사용
.NET 플랫폼에서는 C#, Managed C++, VB.NET 등
다양한 프로그래밍 언어 수용
9-6. 중간 언어의 선택
www.themegallery.com
 중간언어의 요건
1.
2.
3.
4.
5.
중간 레벨성
효율적인 처리의 적합성
확장성
외부 표현성
기계 종속과 언어 종속의 분명한 구분성
Source
전단부
ILS
ILS to ILT
ILT
후단부
Target
 두 개의 중간 언어를 갖는 컴파일러


18
ILS : 소스 언어에 의존적, 고급에 가까움
ILT : 목적 기계에 의존적, 그 자체에 변수의 주소 계산,
자료형 변화, 형에 따른 연산자 등이 모두 반영된 형태
[표 9.2] 중간 언어의 비교(p414| p391)
www.themegallery.com
Three
Three
Abstract
Address
Structured
Machine
Code
Code
Code
Post IR Quadra Triple AST TCOL
C B
B
B
C
A
B
IL Polish
Notation
Criteria
Intermediate level
source to IL
translation
IL to target
efficient
processing translation
interpretation
optimization
external representation
extensibility
clean separation
A : 좋다
A
C
B
B
A
B
C
C
A
B
B
C
A
A
A
C
B
A
C
B
B
B
A
B
B
A
A
A
B
B
C
B
A
B
C
A
C
A
C
C
A
B
A
A
A
B
A
B
A
B : 보통이다
C : 나쁘다
19