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