Lecture 01: Compiler Overview

Slides:



Advertisements
Similar presentations
Copyright © 2006 The McGraw-Hill Companies, Inc. Programming Languages 프로그래밍 언어론 2nd edition Tucker and Noonan 1 장 소 개 A good programming language is a.
Advertisements

운영 체제의 일반 발표자 : 백승재 황영종. 1. 운영체제의 의의 전자 계산기에서 사용자와 하드웨어와의 직접적으로 대화하는 대신 운영 체제라는 시스템 프로그램을 통하여 하드웨어를 다루는 것이다. 한정된 컴퓨터 자원을 효율적으로 관리, 운영함으로써 사용자에게 편의성을 제공하는.
JIT Compile 김진태. JIT Compile 이란 ? Managed Code(C#, java, managed C++ 등 ) 에서의 성능 향상을 목적 으로 둔 컴파일 기법Managed Code 예 ) JVM –JVM 의 일반적인 실행 방식 –JIT Compile.
컴퓨터프로그래밍 I 강원대학교 컴퓨터학부 2012 년 1 학기 담당교수 : 정충교 1. 강사진 강사 : 정충교 교수 연구실 : 공 호 조교 : 3 분반 이남세 연구실 : 공
YES C 제 1 장 C 언어의 개요 1/34 제 1 장 C 언어의 개요 문봉근. YES C 제 1 장 C 언어의 개요 2/34 제 1 장 C 언어의 개요 1.1 프로그램과 C 언어의 특징 1.2 C 언어의 프로그램 구성 1.3 비주얼 C++ 통합 환경 들어가기.
제 4 장 변수, 영역, 수명 변수 바인딩 영역 기억장소 할당과 수명 변수와 그 환경 변수 초기화 상수와 변수.
8장 프로그래밍 언어 8.1 프로그램이란? 8.2 프로그램 언어의 역사 8.3 프로그램 설계 절차
제1장 C#의 기초 1.1 .NET Framwork 1.2 .NET Environment 1.3 C# 소개.
어서와 Java는 처음이지! 제1장 기초 사항.
1. 컴파일러 개론 1-1. Compiler 정의 1-2. Language Processing System
제 3장 프로그래밍 언어 설계 3.1 설계 기준의 역사적 변천 3.2 효율성 3.3 일반성, 직교성, 획일성
Chapter 3 – 프로그래밍 언어 설계 Outline 3.1 설계 기준의 역사적 변천 3.2 효율성
알기 쉽게 해설한 Java 8th edition
어서와 Java는 처음이지! 제1장 기초 사항 IT응용시스템공학과 김형진 교수.
컴퓨터 소프트웨어.
Operating Systems Overview
제 1 장. JAVA란 작성자 : NLIP.
Install & Simulation VLSI 시스템 설계
프로그래밍 언어론 2004년 가을학기 창 병 모 숙명여대 컴퓨터과학과.
Ruby 프로그래밍 1 문자열 입출력 제어구조 looping 함수 정의
누구나 쉽게 즐기는 C언어 콘서트 한남대학교 컴퓨터공학과 이 재 광 교수.
Java 기초 (Orientation & Java 언어소개)
Power Java 제4장 자바 프로그래밍 기초.
Kasimov C언어 세미나 1st.
프로그래밍언어론 2nd edition Tucker and Noonan
출처: IT CookBook, 컴퓨터 구조와 원리 2.0 제 12장
프로그램 개발과 언어 Chapter 05 컴퓨터의 이해
4장. 컴퓨터 시스템의 구성과 기능 다루는 내용 컴퓨터 분해를 통한 본체 살펴보기 컴퓨터 구성요소 컴퓨터의 기능
장. 문법 구조(Syntax) 컴퓨터공학과 권기태 프로그래밍언어론.
제 1 장 C 언어의 개요 Google 공동 창업자, 래리 페이지와 세르게이 브린.
9. 중간언어 9-1. Polish표기법 9-2. N-투플 표기법 9-3. 트리 구조 코드 9-4. 추상 기계 코드
Visual C++ Programming
2 운영체제 소개.
프로그래밍 서울대학교 통계학과 2009년 2학기 컴퓨터의 개념 및 실습 (
운영체제 이나현.
Power Java 제1장 자바 소개.
컴파일러 입문 제 11 장 코드 최적화.
제 1장 시스템 소프트웨어의 개요.
( Overview of the Course Kwangman Man ( SangJi University.
제1장 서론.
쉽게 풀어쓴 C언어 Express 제1장 프로그래밍의 개념 C Express.
제1장 시스템 소프트웨어의 개요 컴퓨터시스템 및 하드웨어 구성 컴퓨터의 구성과 기능 시스템프로그램의 개요
객체 지향 프로그래밍.
Chapter 2 – 언어의 변천 Outline 2.1 디지털 컴퓨터 이전의 언어
컴퓨터 시스템 개관 시스템 프로그래밍 - Lecture #1 신라대학교 컴퓨터공학과 시스템 프로그래밍.
김 정 석 Web Programming 김 정 석
컴 파 일 러 Compilers.
[INA470] Java Programming Youn-Hee Han
프로그래밍언어론 2nd edition Tucker and Noonan
CH2. ASP.NET 페이지 분석 HTML ASP ASP.NET 의 차이점.
운영체제 발표자료 B반 최민웅.
Machine architecture Programming Language Design and Implementation (4th Edition) by T. Pratt and M. Zelkowitz Prentice Hall, 2001 Chapter 2.
Term Project 수행 안내 2011년 2학기 컴파일러.
4. 어휘 분석(Lexical analysis)
제1장 정리 컴퓨터소프트웨어과 2-A반 주세호.
Signature, Strong Typing
Signature, Strong Typing
쉽게 풀어쓴 C언어 Express 제1장 프로그래밍의 개념 C Express.
Signature, Strong Typing
Name Title Company Name
Machine architecture Programming Language Design and Implementation (4th Edition) by T. Pratt and M. Zelkowitz Prentice Hall, 2001 Chapter 2.
Chapter 3 – 프로그래밍 언어 설계 Outline 3.1 설계 기준의 역사적 변천 3.2 효율성
C언어 개요 프로그래밍이란 프로그래밍 언어란 컴퓨터와의 의사소통을 위한 표현 방법 세대별 언어의 발전을 거듭함
강의교안 이용 안내 *이 책에 딸린 강의자료는 교수님의 효율적인 수업진행을 돕기 위해 만들어졌습니다.
Machine architecture Programming Language Design and Implementation (4th Edition) by T. Pratt and M. Zelkowitz Prentice Hall, 2001 Chapter 2.
Lecture 03 제어문과 메소드 Kwang-Man Ko
Lecture 05 문자열, 배열, 디버깅 Kwang-Man Ko
운영체제 학 번 : 이름 : 변현영.
Compiler: Overview Seong Jong Choi Multimedia Lab.
제 1장 프로그래밍 언어 소개 1.1 프로그래밍 언어란 무엇인가 1.2 프로그래밍 언어를 배워야 하는 이유
Presentation transcript:

Lecture 01: Compiler Overview Kwang-Man Ko kkmam@sangji.ac.kr, compiler.sangji.ac.kr Department of Computer Engineering Sang Ji University 2018

강의 정보 교과목명 : 컴파일러 개설학과 : 컴퓨터공학과 4학년 학점 및 시수 : 3학점 3시간 강의시간 : 목 2,3,4교시 이수구분 : 전공선택 (이론) 교재 : 컴파일러 입문(정익사), 오세만 연락처 : 연구실위치 : 민주관 1층 109호. 연락처 :  033-730-0486, 033-730-0480 E-mail : kkman@sangji.ac.kr Homepage : http://compiler.sangji.ac.kr

프로그래밍 언어 번역기 Source program Target program 프로그래밍언어 번역기(translator) Compiler, 2012. 프로그래밍 언어 번역기 프로그래밍언어 번역기(translator) 원시 프로그램을 입력으로 받아 의미적으로 동등하면서 직접 기계에서 실행될 수 있는 형태로 번역. Source program Target program kkman@ssangji.ac.kr

좋은(Good) 프로그래밍 언어의 요건 명확한 언어 개념 문법적인 구조(syntax, grammar) 의미(semantics) 프로그래머의 생각을 자연스럽게 표현 호환성 (이식성), 신뢰성, 모듈화, 효율성 언어의 확장성이 우수 좋은 프로그래밍 환경

COBOL FORTRAN COmmon Business Oriented Language 1960년대 초, 코다실(CODASYL)에서 발표 주로 업무용으로 사용 1968 ~ 1974년에 ANSI COBOL을 제정 FORTRAN FORmula TRANslation 1960년대 초, J. Backus를 중심으로 개발 과학 계산용 언어 1977년 FORTRAN77이 발표

ALGOL Pascal ALGOrithmic Language ALGOL68 - 1968년 IFIP WG2.1에서 발표 구문구조를 형식 문법으로 표현 언어의 구조와 의미가 명료 제어 구문 구조가 우수 많은 프로그래밍 언어에 큰 영향 Pascal 1970년대 초, N.Wirth가 고안 프로그래밍 언어론적인 관점에서 설계 전산학적인 응용에 적합 - 자료구조, 알고리즘

Ada C++ 1980년 미국방성(DoD)에서 발표 Compiler, 2012. Ada 1980년 미국방성(DoD)에서 발표 reliability, simplicity, modularity, efficiency package, generic features, multi-tasking real-time application에 적합 C++ 1983년 B.Stroustrup OOPL : class, inheritance, polymorphism kkman@ssangji.ac.kr

Java James Gosling, Sun MicroSystems OOPL, Exception, Multithread Compiler, 2012. Java James Gosling, Sun MicroSystems OOPL, Exception, Multithread Internet & Distributed Environment 플랫폼 독립성 Applet, Application kkman@ssangji.ac.kr

C# John Gough, Microsoft .NET Framework, OOPL(Object-Oriented Programming Language) JIT (Just In-Time Compilation) MSIL (Microsoft Intermediate Language) CLR (Common Language Runtime) Expressiveness and Simplicity

번역기와 컴파일러 프로그래밍 언어 번역기 종류 컴파일러(compiler) 인터프리터(interpreter) 어셈블러(assembler) 전처리기(preprocessor) . . . kkman@ssangji.ac.kr

컴파일러 Compiler C compiler 컴파일러(Compiler) 정의 고급 언어로 쓰여진 프로그램을 어떤 특정한 컴퓨터에서 직접 수행 가능한 형태의 프로그램으로 번역해 주는 시스템 프로그램. High-level Source Program Compiler Object Program (Assembly Language, Machine Language) C compiler test.c => C-complier => test.obj kkman@ssangji.ac.kr

크로스 컴파일러(cross compiler) 크로스 컴파일러 정의 원시 프로그램을 컴파일러가 수행되고 있는 기계에 대한 기계어로 번역하는 것이 아니라 다른 기종에 대한 기계어로 번역하는 컴파일러. SPARC 컴퓨터에서 Intel 8086/80386 코드 생성 C 컴파일러 목적프로그램(SPARC) C 프로그램 C 크로스 컴파일러(intel) 목적프로그램(Intel) SPARC 컴퓨터 kkman@ssangji.ac.kr

인터프리터(interpreter) Interpreter 인터프리터 정의 입력 데이터 원시 프로그램 실행 결과 Compiler, 2012. 인터프리터(interpreter) 인터프리터 정의 원시 프로그램을 입력으로 받아 목적 언어 또는 프로그램으로 변환하지 않고 직접 실행해서 결과를 출력해 주는 시스템 프로그램. HTML 인터프리터, Bytecode 인터프리터(Java) 입력 데이터 Interpreter 원시 프로그램 실행 결과 kkman@ssangji.ac.kr

전처리기(preprocessor) 기능 전처리기 번역기 프로그래밍 언어에 유용한 기능들을 추가 Compiler, 2012. 전처리기(preprocessor) 기능 프로그래밍 언어에 유용한 기능들을 추가 언어 확장(language extension) 확장된 프로그램은 기본 언어에 대한 언어 번역기에 의해 번역 전처리기 확장된 원시 프로그램 번역기 원시 프로그램 목적 프로그램 kkman@ssangji.ac.kr

조건부 컴파일(conditional compile) Language to Language translator Compiler, 2012. 마크로(macro) 유사한 원시 코드를 마크로로 정의하고 필요할 때마다 확장 프로그래머의 생산성을 증가 #define Max 1000 조건부 컴파일(conditional compile) Language to Language translator C to Pascal C++ to C kkman@ssangji.ac.kr

컴파일러의 개략적인 구조 원시 프로그램 전단부 중간코드 후단부 목적 프로그램 * 원시 프로그램 : Source program Compiler, 2012. 컴파일러의 개략적인 구조 원시 프로그램 전단부 중간코드 후단부 목적 프로그램 * 원시 프로그램 : Source program * 목적 프로그램 : Target program * 전단부 : Front-end * 후단부 : Back-end * 중간 코드 : Intermediate Code kkman@ssangji.ac.kr

전단부(Front-end) 후단부(Back-end) 원시 프로그래밍 언어 종류에 의존적 원시 프로그램을 분석, 중간 코드 생성 Compiler, 2012. 전단부(Front-end) 원시 프로그래밍 언어 종류에 의존적 원시 프로그램을 분석, 중간 코드 생성 원시 프로그램마다 전단부가 각각 존재 어휘 분석, 구문 분석, 의미 분석, 중간 코드 생성 후단부(Back-end) 목적 기계(target machine)에 의존적 중간 코드를 특정 기계에 대한 목적 코드로 번역 목적 기계마다 각각의 후단부가 존재 목적 코드 생성, 코드 최적화 단계 kkman@ssangji.ac.kr

컴파일러의 일반적 구조 컴파일러 원시 프로그램 목적 프로그램 전단부 후단부 어휘 분석 구문 분석 의미 분석 중간 코드 생성 Compiler, 2012. 컴파일러의 일반적 구조 원시 프로그램 컴파일러 목적 프로그램 전단부 후단부 어휘 분석 구문 분석 의미 분석 중간 코드 생성 코드 최적화 목적 코드 생성 토큰 구문트리 중간코드 의미분석 트리 최적화된 중간코드 kkman@ssangji.ac.kr

어휘 분석(lexical analysis) Compiler, 2012. 어휘 분석(lexical analysis) 어휘 분석기, 스캐너(scanner) 원시 프로그램에 대해 일련의 토큰(token) 생성 컴파일러 내부에서 효율적이며 다루기 쉬운 정수로 바꾸어 줌. Scanner Source Programs A sequence of tokens kkman@ssangji.ac.kr

토큰(Token) 정의 종류 문법적으로 의미를 갖는 최소의 단위 일반 형태 프로그래머에 의해 지정 명칭, 상수 특수 형태 Compiler, 2012. 토큰(Token) 정의 문법적으로 의미를 갖는 최소의 단위 종류 일반 형태 프로그래머에 의해 지정 명칭, 상수 특수 형태 언어 설계자에 의해 지정 keywords, operators, delimiter, ... kkman@ssangji.ac.kr

A, :=, B, +, 3, ; // 6개 토큰으로 분리 토큰의 예 A := B + 3; Compiler, 2012. 토큰의 예 A := B + 3; A, :=, B, +, 3, ; // 6개 토큰으로 분리 IF A > 10 THEN ... Token : IF A > 10 THEN ↓ ↓ ↓ ↓ ↓ Token number : 29 1 20 2 35 kkman@ssangji.ac.kr

구문 분석 (syntax analyze) Parser 구문 분석기(syntax analyzer), 파서(parser) 트리 Compiler, 2012. 구문 분석 (syntax analyze) 구문 분석기(syntax analyzer), 파서(parser) 토큰을 받아 원시 프로그램에 대한 문법 검사 올바른 구문 구조 또는 문장 파스 트리(Parse Tree) 추상화 구문 트리(Abstract Syntax Tree; AST) 에러를 가진 구문 구조 에러 메시지(Syntax Error) 출력 트리 Parser 토큰 에러메시지 kkman@ssangji.ac.kr

중간 코드(intermediate code) 생성 Compiler, 2012. 중간 코드(intermediate code) 생성 중간 코드 생성기 구문 트리를 입력으로 받아 의미 검사를 수행한 후 중간 코드 생성 의미 검사(semantic checking) 중간 코드 생성(intermediate code generation) 장점 컴파일러를 기능적으로 독립적인 모듈로 작성 원시 프로그램의 이식성 증가 번역 과정을 쉽게 표현, 효율적 처리 중간 코드에 대한 최적화 가능 Interpretive Compiling kkman@ssangji.ac.kr

Ex) A := B + 1; Tree : := A + B 1 Ucode: LOD 1 2 LDC 1 ADD STR 1 1 Compiler, 2012. Ex) A := B + 1; Tree : := A + B 1 Ucode: LOD 1 2 LDC 1 ADD STR 1 1 kkman@ssangji.ac.kr

의미 분석(semantic analyze) Compiler, 2012. 의미 분석(semantic analyze) 정의 구문 분석 결과에 추가적인 정보를 출력하는 단계 속성 문법(attribute grammar) Inherited attribute Synthesized attribute 형 검사(type checking) 연산자 정의에 맞는 피연산자를 가지는가를 검사 실수가 배열의 첨자로 사용 => Error 실수와 정수의 혼합 연산 => 형 변환(type conversion) kkman@ssangji.ac.kr

코드 최적화(code optimization) Compiler, 2012. 코드 최적화(code optimization) 기능 동등한 의미를 유지하면서 효율적 코드 생성 코드 실행시 기억 공간, 실행 시간 절약 중간 코드, 목적코드에 대한 최적화 (선택적) 단계 최적화기의 위치 Pre-code Optimizer Post-code Optimizer 핍홀 최적화(Peephole Optimization) kkman@ssangji.ac.kr

코드 최적화 (optimization) 종류 Compiler, 2012. 코드 최적화 (optimization) 종류 코드 최적화 관점(범위) 지역 최적화 (local optimization) 기본 블록 단위에서 일련의 비효율적인 코드들을 구분해 내고 좀더 효율적인 코드로 개선하는 방법 1. Constant folding 2. Eliminating redundant load, store instructions 3. Algebraic simplification 4. Strength reduction 전역 최적화 (global optimization) 프로그램 전체 흐름 분석 기술을 이용하여 기본 블록들 사이에 최적화 수행. 1. Common subexpression 2. Moving loop invariants 3. Removing unreachable codes kkman@ssangji.ac.kr

목적 코드 생성 목적기계 코드 생성 목적 코드 생성기 기능 Compiler, 2012. 목적 코드 생성 목적기계 코드 생성 중간 코드를 입력으로 받아 의미적으로 동등한 목적 기계에 대한 코드를 생성 목적기계 코드 생성기(target code generator) 목적 코드 생성기 기능 목적 코드 선택 및 생성 레지스터의 운영 기억 장소 할당 기계 의존적인 코드 최적화 kkman@ssangji.ac.kr

에러 복구 (error recovery) 에러 복구 (recovery) 정의 에러 처리(error handling) 에러가 다른 문장에 영향을 미치지 않도록 수정하는 것 error repair : 에러가 발생하면 복구해 주는 것 에러 처리(error handling) Error detection Error recovery Error reporting Error repair 에러 종류 문법 에러(syntax error) 의미 에러(sematic error) 실행시간 에러(run-time error)

컴파일러 자동화 도구 컴파일러 자동화 도구 Program written in L Language Description : L Compiler, 2012. 컴파일러 자동화 도구 컴파일러 자동화 도구 컴파일러의 전 과정 또는 각 단계들을 자동적으로 생성하는 도구 컴파일러 생성기(compiler generator) 컴파일러-컴파일러(compiler-compiler) Language Description : L Compiler -Compiler Machine Description : M Program written in L Executable form on M kkman@ssangji.ac.kr

컴파일러 자동화 도구, 컴파일러 생성기(compiler generator) 입력을 주면 출력으로 컴파일러를 자동으로 생성해주는 컴파일러-컴파일러 : PQCC(Production-Quality Compiler Compiler) ACK(Amsterdam Compiler Kit) 어휘 분석, 구문 분석, 코드 생성 등 컴파일러의 단계(phase)를 자동 생성 번역기 제작 시스템 (translator writing system) 렉스(Lex) 와 야크 (YACC, Yet Another Compiler Compiler)

렉스 (LEX) 1975년에 M. E. Lesk 가 고안 사용자가 정의한 토큰에 대한 표현인 정규 표현과 수행 코드를 입력 받아 C로 작성된 어휘 분석기 (= 스캐너) 출력 어휘 분석기는 입력 프로그램에서 정규 표현에 해당하는 토큰을 찾았을 때, 결합된 수행 코드를 수행하여 토큰 정보 생성

YACC 야크 구문 분석기(=파서, parser)를 자동 생성해 주는 구문 분석기 생성기(parser generator) 1975년 벨 연구소의 존슨(Steve Johnson)이 주축이 되어 개발한 LALR(1) 구문 분석기 생성기로 문법 규칙에 대한 수행 코드를 C 언어로 기술

Lex와 YACC

QnA