9. 중간언어 9-1. 소개 9-2. Polish표기법 주소 코드 9-4. 트리 구조 코드

Slides:



Advertisements
Similar presentations
Doxygen 으로 코드보기 신동진 신수호. 프로젝트 발주 ㅇㅇㅇ NoYea h 프로그래머 1 프로그래머 2.
Advertisements

프로그램이란 프로그램 생성 과정 프로젝트 생성 프로그램 실행 컴퓨터를 사용하는 이유는 무엇인가 ? – 주어진 문제를 쉽고, 빠르게 해결하기 위해서 사용한다. 컴퓨터를 사용한다는 것은 ? – 컴퓨터에 설치 혹은 저장된 프로그램을 사용하는 것이다. 문제를 해결하기 위한.
프로그래밍언어론 TA 윤들녁. 소개 윤들녁 연락처 : 공대 7 호관 4 층 401 호 데이터베이스 연구실 실습 후 날짜 _ 학번.zip 으로.
Big Data & Hadoop. 1. Data Type by Sectors Expected Value using Big Data.
제 5 장 구문 정의  프로그래밍 언어의 기본 문자 집합  Alphabet 문자 (A-Z) 26 개 + 아라비아 숫자 (0 - 9) 10 개  예 ) Fortran : 기본 문자 집합 + 13 개의 특수문자 (=+ - * / ( ),. $ ‘ : 공백 ) Algol60.
천안천일고등학교 Copyright © by Ryu Bin All rights reserved 프로그래밍 실무.
.Net History. Visual Studio.Net 2002 /.Net Framework 1.0 제품의 버전 / 특징 2002 년 - Visual Studio.Net 2002 /.Net Framework 1.0 첫 통합 개발 환경 - C# 언어 등장 (C# 1.0)
장. 프로그래밍 언어의 이해 컴퓨터공학과 권기태 프로그래밍언어론프로그래밍 언어.
컴퓨터와 인터넷.
목 차 C# 언어 특징 .NET 프레임워크 C# 콘솔 프로그램 C# 윈도우 프로그램 실습 프로그래밍세미나 2.
3. 명령어 집합 구조 순천향대학교 정보기술공학부 이상정.
2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
Power Java 제3장 이클립스 사용하기.
1. 컴파일러 개론 1-1. Compiler 정의 1-2. Language Processing System
1장. 이것이 C 언어다.. 1장. 이것이 C 언어다. 프로그래밍 언어 1-1 C 언어의 개론적 이야기 한글, 엑셀, 게임 등의 프로그램을 만들 때 사용하는 언어 ‘컴퓨터 프로그래머’라는 사람들이 제작 C 언어(C++ 포함)를 가장 많이 사용함.
컴퓨터 프로그래밍 기초 [Final] 기말고사
Power Java 제2장 자바 개발 도구.
1장 기본적인 사항(3) 순천향대학교 컴퓨터공학과 하상호.
1장 C#의 배경.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 12. 포인터의 이해.
시스템집적반도체 설계 검증 환경과 기법 Ch 7.
System Programming 제1장 배경지식 시스템 프로그래밍.
컴퓨터 기본 원리 프로그래밍 언어 C 프로그래밍 환경 C 프로그래밍 작성, 컴파일, 링크 및 실행
9. 중간언어 9-1. Polish표기법 9-2. N-투플 표기법 9-3. 트리 구조 코드 9-4. 추상 기계 코드
Java 기초 (Java JDK 설치 및 환경설정)
CHAPTER 02 OpenCV 개요 PART 01 영상 처리 개요 및 OpenCV 소개.
C / C++ Programming in multi platform
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
Error Detection and Correction
컴퓨터정보공학부 서버 안내 [ IBM x3500 ] it.sangji.ac.kr ict.sangji.ac.kr 혹은
제1장 컴파일러 개요.
컴파일러 입문 제 11 장 코드 최적화.
Computational Thinking
1장 기본적인 사항(3) 순천향대학교 컴퓨터공학과 하상호.
AVR – ATmega103(ATMEL) Compilers & ISP
Lecture 01: Compiler Overview
자바 5.0 프로그래밍.
Chap 6.Assembler 유건우.
UNIT 07 Memory Map 로봇 SW 교육원 조용수.
2장. JSP 프로그래밍을 위한 환경구성 제2장.
Chapter 01 컴퓨터와 프로그램.
2장. 데이터베이스 관리 시스템 데이터베이스 관리 시스템의 등장 배경 데이터베이스 관리 시스템의 정의
UNIX Unbounded A Beginning Approach
CHAPTER 04. 프로그래밍 언어 인간과 컴퓨터의 대화_진화하는 소통. 진화하는 컴퓨터
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
컴 파 일 러 Compilers.
제 9장 트랜스레이터.
Tiny OS와 NesC Tiny OS Part1. Won Mi Sun – 17 지능제어 연구실.
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
2장. 변수와 타입.
자바 5.0 프로그래밍.
LabVIEW WiznTec 주임 박명대 1.
Part 1 개요 Chapter 1 : 컴퓨터와 프로그램 그리고 자바 Chapter 2 : 자바의 환경
“사람과 컴퓨터” 이 점 숙 컴퓨터와 소프트웨어 “사람과 컴퓨터” 이 점 숙
4장. 데이터 표현 방식의 이해. 4장. 데이터 표현 방식의 이해 4-1 컴퓨터의 데이터 표현 진법에 대한 이해 n 진수 표현 방식 : n개의 문자를 이용해서 데이터를 표현 그림 4-1.
9. 중간언어 9-1. 소개 9-2. Polish표기법 주소 코드 9-4. 트리 구조 코드
AT MEGA 128 기초와 응용 I 기본적인 구조.
창의 설계 가이드 (모터 프로그래밍 및 테스트)
Chapter 01 자바의 개요 자바는 최초 전자기기의 내장형 소프트웨어를 위해 개발되었으나, 최근 엔터프라이즈 응용에도 폭 넓게 활용됨 자바의 특징과 실행방법, 개발 환경 및 도구에 대해 소개.
공학도를 위한 C언어 프로그래밍실습1 -통합개발환경 사용법-
TVM ver 최종보고서
발표자 : 이지연 Programming Systems Lab.
3.2 분기 명령어.
실습과제 (변수와 자료형, ) 1. 다음 작업 (가), (나), (다)를 수행하는 프로그램 작성
제 4 장 Record.
1장 C 언어의 개요 C 언어의 역사와 기원 C 언어의 특징 프로그램 과정 C 프로그램 구조 C 프로그램 예제.
교량 구조물의 개념 설계 및 프로토타입 제작 과정
자바 프로그래밍 입문 : 객체지향적 사고법 chapter 01. 자바 언어의 소개.
Machine architecture Programming Language Design and Implementation (4th Edition) by T. Pratt and M. Zelkowitz Prentice Hall, 2001 Chapter 2.
1장. C Language Synopsis.
Presentation transcript:

9. 중간언어 9-1. 소개 9-2. Polish표기법 9-3. 3-주소 코드 9-4. 트리 구조 코드 9-5. 가상 기계 코드 9-6. 중간 언어의 선택

9-1. 소 개 중간 언어의 등장 배경 초창기의 컴파일러 : 단일 패스 컴파일러 프로그래밍 언어의 다양화 9-1. 소 개 중간 언어의 등장 배경 프로그래밍 언어의 다양화 컴퓨터 하드웨어의 급격한 발전  많은 컴파일러 작성 요구  컴파일러의 생산 기술도 빠르게 발전 초창기의 컴파일러 : 단일 패스 컴파일러 원시 프로그램을 중간 코드 생산 없이 직접 목적 코드로 번역

중간언어 사용의 장점 컴파일러를 기능적으로 독립적인 여러 모듈들로 구성 컴파일러 자체의 이식성(portability) 증가 중간언어 사용의 장점 컴파일러를 기능적으로 독립적인 여러 모듈들로 구성 컴파일러 자체의 이식성(portability) 증가 고급 원시 언어와 저급 목적 코드간의 의미적인 차이를 이어주는 교량 역할을 중간 코드가 담당  번역과정이 좀 더 쉽게 표현, 효율적 처리 중간 코드를 이용하여 최적화를 수행함으로써 기계와 독립적인 최적화가 가능 인터프리티브 컴파일링(interpretive compiling) 시스템에서 인터프리터를 이용하여 실행

1. Polish 표기법 … Postfix 표현, IR 중간언어 형태에 따른 4 가지 부류 1. Polish 표기법 … Postfix 표현, IR 2. 3-주소 코드 … Triple, Quadruple, Indirect Triple 3. 트리 주소 코드 … AST, TCOL, DIANA 4. 가상 기계 코드 … P-코드, EM-코드, U-코드, 바이트코드, .NET IL

9-2. Polish표기법 폴란드식 표기법으로 Lucasiewiez가 개발한 가장 오래된 중간 코드 형태 Fortran 컴파일러에서 산술 연산식을 위한 중간 코드로 사용 특히, Basic 같은 인터프리터에서 중간 코드로 많이 사용 prefix polish 표기법과 postfix polish 표기법 <예> 산술식 A = B + C *D / E에 해당하는 postfix 표현 A B C D * E / + =

9-3. 3-주소 코드( Three address code) 정의 : 중간 코드를 한 개의 연산자와 두 개의 피연산자로 구성 <예> A := B op C <예4> C 언어 문장 a = b * (c + d); 에 대한 3-주소 코드( p381| p359) (t1 := c + d) (t2 := b * t1) (a := t2)

3-주소 코드 가장 널리 알려진 형태 : triple과 quadruple 차이점은 결과값을 갖는 피연산자의 유무 triple : 그 자체에 값을 저장하여 triple 번호로 참조 <예 5> p382| p360 참조

9-4. 트리 구조 코드 정의 원시 프로그램의 트리 구조 표현은 프로그램의 의미를 보다 효율적으로 표현할 수 있는 방법 코드의 특성상 손쉽게 재구성이 가능  최적화 컴파일러의 중간 언어로 가장 적합한 표현 트리 구조 표현 방법 1. 파스 트리 2 . 추상 구문 트리( AST : Abstract Syntax Tree) : 파스트리에서 불필요한 중복된 정보를 제거한 것

TCOL(Tree structured COmmon Language) 트리 형태를 갖는 중간 언어로 컴파일러의 후단부를 자동화하기 위한 여러 가지 명세에 이용 AST가 고급에 가까운 반면, TCOL은 비교적 중간 레벨 TCOL : AST에다 의미 분석한 결과를 반영한 트리 언어 종속 부분과 기계종속 부분을 분리하는데 유용 하게 사용 <예 9> p388| p365 참조 Semantic Analyzer AST TCOL  AST와 TCOL의 관계

Diana(Descriptive Intermediate Attributed Notation for Ada) TCOL 생성 과정 Diana(Descriptive Intermediate Attributed Notation for Ada) 컴파일러의 전단부와 후단부 사이의 정보 교환에 적당하게 설계된 Ada프로그램의 중간 형태 네 가지 속성 구조적 속성 어휘적 속성 의미적 속성 코드 속성 스캐너 파서 중간 코드 생성기 AST TCOL 원시프로그램

9-5. 가상 기계 코드 (p391| p368~ ) 포터블 컴파일러(portable and adaptable compiler) 컴파일러를 전단부 부분과 후단부 부분으로 분리, 잘 정의된 인터페이스를 사용하여 이 두 부분을 연결해 줌으로써 보다 이식 가능하고 적용 가능한 컴파일러 연결방법은 가상 기계를 설정, 이 기계의 명령어 집합을 중간 언어로 사용하여 전단부 부분과 후단부 부분을 연결하는 방법

포터블 컴파일러의 모델 가상 기계 코드의 종류 P- 코드 EM-코드 U-코드 바이트 코드 .NET IL 중간언어 목적 코드 원시프로그램 전단부 후단부 목적 기계 실행 가상 기계 인터프리터 실행

1) P-코드 Pascal 컴파일러를 제작하는데 사용된 중간언어 Pascal-P 컴파일러는 Pascal 프로그램을 입력 받아 P-코드를 생성 P-기계는 스택 컴퓨터로 네 개의 특수 레지스터와 기억 공간으로 구성 PC-Program Counter SP-Stack Pointer MP-Mark Pointer NP-New Pointer

2) EM-코드 ACK에서 중간 언어로 사용 ACK(Amsterdam Compiler Kit)  14 장 참조 Algol 형태의 원시 언어와 byte machine 형태의 목적 기계에 적합한 EM-기계 설정 언어에 대한 전단부와 목적 기계에 대한 후단부 제공  compiler 쉽게 제작, 컴파일러 자동화 도구 의사 명령어와 EM 명령어로 구분, 각 명령어는 상수, 명칭 등과 같은 피연산자를 갖을 수 있다. 의사 명령어 기억 장소를 확보 상수 정의를 위한 기능 분리 컴파일이나 링킹에 관련된 기능을 수행

3) U-코드 Stanford 대학에서 제작한 포터블 Pascal 컴파일러에서 사용한 중간 형태로서 가상적인 스택 기계에 근거 모든 변수에 대한 주소는 두 개의 투플(B, O)로 구성 B는 블록의 번호를 의미 O는 블록의 시작으로부터의 오프셋 <예 11> p397| p374 <예 12> p398| p375

4) 바이트 코드(byte code) 자바 프로그래밍 환경에서 지원하는 중간 언어 이 기종간의 실행 환경에 적합하게 설계된 스택 기반의 가상 기계 코드 자바 가상 기계(JVM : Java Virtual Machine)의 명령어 집합은 바이트 코드 인터프리터 방식과 JIT(Just-In-Time) 컴파일러 방식에 의해 실행 <그림 9.8> 자바 가상 기계 <표 9.1> p409| p386 <예 16> p410| p386 자바 컴파일러 JVM 자바 프로그램 바이트 코드 실행 결과

5) .NET IL .NET 환경에서 언어 통합을 위해 설계된 중간 언어 MSIL(Microsoft Intermediate Language)라고도 부름 .NET IL은 하드웨어 및 플랫폼에 독립적이고 실행은 JIT(Just-In-Time) 방법 사용 .NET 플랫폼에서는 C#, Managed C++, VB.NET 등 다양한 프로그래밍 언어 수용

9-6. 중간 언어의 선택 중간언어의 요건 중간 레벨성 효율적인 처리의 적합성 확장성 외부 표현성 기계 종속과 언어 종속의 분명한 구분성 ILS : 소스 언어에 의존적, 고급에 가까움 ILT : 목적 기계에 의존적, 그 자체에 변수의 주소 계산, 자료형 변화, 형에 따른 연산자 등이 모두 반영된 형태 전단부 후단부 ILS to ILT ILS ILT Source Target  두 개의 중간 언어를 갖는 컴파일러

[표 9.2] 중간 언어의 비교(p414| p391) Polish Notation Three Address Code Structured IL Criteria Post IR Quadra Triple AST TCOL Abstract Machine Intermediate level C B A source to IL translation IL to target interpretation efficient processing optimization external representation extensibility clean separation A : 좋다 B : 보통이다 C : 나쁘다