Lecture 01 Compiler Overview KwangMan Ko kkmamsangji ac

  • Slides: 35
Download presentation
Lecture 01: Compiler Overview Kwang-Man Ko kkmam@sangji. ac. kr, compiler. sangji. ac. kr Department

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

l COBOL – – COmmon Business Oriented Language 1960년대 초, 코다실(CODASYL)에서 발표 주로 업무용으로

l COBOL – – COmmon Business Oriented Language 1960년대 초, 코다실(CODASYL)에서 발표 주로 업무용으로 사용 1968 ~ 1974년에 ANSI COBOL을 제정 l FORTRAN – – FORmula TRANslation 1960년대 초, J. Backus를 중심으로 개발 과학 계산용 언어 1977년 FORTRAN 77이 발표 Lecture 01: Compiler Overview, kkman@sangji. ac. kr 5

l Ada – 1980년 미국방성(Do. D)에서 발표 – reliability, simplicity, modularity, efficiency – package,

l Ada – 1980년 미국방성(Do. D)에서 발표 – reliability, simplicity, modularity, efficiency – package, generic features, multi-tasking – real-time application에 적합 l C++ – 1983년 B. Stroustrup – OOPL : class, inheritance, polymorphism Lecture 01: Compiler Overview, kkman@sangji. ac. kr 7

l Java – James Gosling, Sun Micro. Systems – OOPL, Exception, Multithread – Internet

l Java – James Gosling, Sun Micro. Systems – OOPL, Exception, Multithread – Internet & Distributed Environment • 플랫폼 독립성 – Applet, Application Lecture 01: Compiler Overview, kkman@sangji. ac. kr 8

l C# – – – John Gough, Microsoft. NET Framework, OOPL(Object-Oriented Programming Language) JIT

l 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 Lecture 01: Compiler Overview, kkman@sangji. ac. kr 9

번역기와 컴파일러 l 프로그래밍 언어 번역기 종류 – 컴파일러(compiler) – 인터프리터(interpreter) – 어셈블러(assembler) –

번역기와 컴파일러 l 프로그래밍 언어 번역기 종류 – 컴파일러(compiler) – 인터프리터(interpreter) – 어셈블러(assembler) – 전처리기(preprocessor) –. . . Lecture 01: Compiler Overview, kkman@sangji. ac. kr 10

컴파일러 l 컴파일러(Compiler) 정의 – 고급 언어로 쓰여진 프로그램을 어떤 특정한 컴퓨터에서 직접 수행

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

l 마크로(macro) – 유사한 원시 코드를 마크로로 정의하고 필요할 때마다 확장 – 프로그래머의 생산성을

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

어휘 분석(lexical analysis) l 어휘 분석기, 스캐너(scanner) – 원시 프로그램에 대해 일련의 토큰(token) 생성

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

l 토큰의 예 – A : = B + 3; A, : =, B,

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

Ex) A : = B + 1; Tree : : = A + B

Ex) A : = B + 1; Tree : : = A + B Ucode: 1 LOD 1 2 LDC 1 ADD STR 1 1 Lecture 01: Compiler Overview, kkman@sangji. ac. kr 24

코드 최적화 (optimization) 종류 l 코드 최적화 관점(범위) – 지역 최적화 (local optimization) •

코드 최적화 (optimization) 종류 l 코드 최적화 관점(범위) – 지역 최적화 (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 Lecture 01: Compiler Overview, kkman@sangji. ac. kr 27

에러 복구 (error recovery) l 에러 복구 (recovery) 정의 – 에러가 다른 문장에 영향을

에러 복구 (error recovery) l 에러 복구 (recovery) 정의 – 에러가 다른 문장에 영향을 미치지 않도록 수정하는 것 – error repair : 에러가 발생하면 복구해 주는 것 l 에러 처리(error handling) – – Error detection recovery reporting repair l 에러 종류 – 문법 에러(syntax error) – 의미 에러(sematic error) – 실행시간 에러(run-time error) Lecture 01: Compiler Overview, kkman@sangji. ac. kr 29

컴파일러 자동화 도구 l 컴파일러 자동화 도구 – 컴파일러의 전 과정 또는 각 단계들을

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

l 컴파일러 자동화 도구, 컴파일러 생성기(compiler generator) – 입력을 주면 출력으로 컴파일러를 자동으로 생성해주는

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

Lex와 YACC Lecture 01: Compiler Overview, kkman@sangji. ac. kr 34

Lex와 YACC Lecture 01: Compiler Overview, kkman@sangji. ac. kr 34

Qn. A

Qn. A