SlideShare a Scribd company logo
제 1 장
컴파일러 개론
컴파일러 입문
목 차
 1.1 프로그래밍 언어
 1.2 번역기와 컴파일러
 1.3 컴파일러의 일반적인 구조
 1.4 컴파일러 자동화 도구
Introduction to Compiler Design Theory Page 2
컴파일러란??
 고급 언어로 쓰여진 프로그램을 컴퓨터에서 실행시키기
위한 언어 번역기 (translator) 중의 하나
 고급 언어 프로그램을 입력으로 받아
 의미적으로 동등하면서
 직접 기계에서 실행될 수 있는 형태로 번역하는 작업을 수행
 효율적인 컴파일러 제작을 위해 multi-pass 형태로 제작
Introduction to Compiler Design Theory Page 3
Introduction to Compiler Design Theory Page 4
프로그래밍 언어
 좋은 프로그래밍 언어의 요건
 언어의 개념이 명확
 문법적인 구조(syntax)
 의미(semantics)
 프로그래머의 생각을 자연스럽게 표현
 호환성(이식성), 신뢰성, 모듈화, 효율성
 언어의 확장성이 우수
 좋은 프로그래밍 환경
프로그래밍 언어
 특수 목적 언어(special purpose programming language)
 컴퓨터의 특정 응용 분야에 적합하도록 고안된 언어
 일반 범용 언어(general purpose programming language)
 모든 컴퓨터 응용 분야에 적합하도록 고안된 언어
 저급언어(low-level language)와 고급언어(high-level language)
 고급언어의 장점 : 생산성(productivity), 이식성(protability), debugging 용이,
 주력 언어의 변천 과정
 COBOL, FORTRAN, ALGOL, Ada
 Pascal, C, C++, Java, C#
 인터넷 프로그램 등등등등등
Introduction to Compiler Design Theory Page 5
Introduction to Compiler Design Theory Page 6
번역기와 컴파일러
 Compiler
“A compiler is a computer program which translates programs written in
a particular high-level programming language into executable code for a
specific target computer.”
ex) C compiler on SPARC
 C program을 입력으로 받아 SPARC에서 수행 가능한 코드를
출력한다.
Compiler
Source
Program
Object
Program
(Assembly Language,
Machine Language)
Introduction to Compiler Design Theory Page 7
 Compiler Structure
 Front-End : language dependent part
 Back-End : machine dependent part
Source
Programs
Object
Programs
Front-End
Back-End
Intermediate
Code
Introduction to Compiler Design Theory Page 8
Cross-Compiler
“A cross-compiler is a program which is to run on machine A
and produce target code for another machine B.”
Compiler
on A machine
Source
Programs
Target Code
for machine B
Introduction to Compiler Design Theory Page 9
Interpreter
“An interpreter transforms a program directly into a sequence
of machine actions and produces the results of the program.”
 Compiler : Operational System
 Interpreter : Developing System or Educational System
Interpreter
data
Result
Source
Programs
Introduction to Compiler Design Theory Page 10
 Preprocessor
 for the language extension
 Macro substitution
 Conditional compilation
 Inclusion of files
Preprocessor Translator
Source
Program
Target
Programs
Extended
Source
Program
Introduction to Compiler Design Theory Page 11
일반적인 컴파일러 구조
Source
Programs
Object
Programs
Lexical Analyzer
Syntax Analyzer
Intermediate Code
Generator
Code Optimizer
Target Code
Generator
Token
Tree
Intermediate
Code
Optimized
Code
I.C. : Intermediate Code
O.C. : Optimized Code
Introduction to Compiler Design Theory Page 12
1. Lexical Analyzer(Scanner)
 입력 : 원시 프로그램, 출력 : tokens
 token : 문법적으로 의미를 갖는 최소 단위
 컴파일러 내부에서 효율적이며 다루기 쉬운 정수로 바꾸어 줌.
ex) if ( a > 10 ) ...
Token : if ( a > 10 ) ...
Token Number : 32 7 4 25 5 8
Scanner
Source
Programs
A sequence of
tokens
Introduction to Compiler Design Theory Page 13
2. Syntax Analyzer(Parser)
 기능: Syntax checking, Tree generation.
 출력: incorrect - error message 출력
correct - program structure (=> tree 형태) 출력
ex) if (a > 10) a = 1;
if
> =
a 10 a 1
ParserTokens Tree
Introduction to Compiler Design Theory Page 14
3. Intermediate Code Generator
 입력 : 파스 트리, 출력 : 중간 코드
 Semantic checking
ex) if (a > 10) a = 1.0; ☞ a가 정수일 때 semantic error !
ex) a = b + 1; Tree : =
a +
b 1
Ucode: lod 1 2
ldc 10
add
str 1 1
- variable reference: (base, offset)
Introduction to Compiler Design Theory Page 15
4. Code Optimizer
 Optional phase
 비효율적인 code를 구분해 내서 더 효율적인 code로 변환
 Meaning of optimization
 major part : improve running time
 minor part : reduce code size
ex) LDC R1, 1
LDC R1, 1 (x)
 Criteria for optimization
 preserve the program meanings
 speed up on average
 be worth the effort
Introduction to Compiler Design Theory Page 16
 Local optimization
 local inspection을 통하여 inefficient한 code들을 구분해 내서
좀 더 efficient한 code들로 바꾸는 방법.
1. Constant folding
2. Eliminating redundant load, store instructions
3. Algebraic simplification
4. Strength reduction
 Global optimization
 flow analysis technique을 이용
1. Common subexpression
2. Moving loop invariants
3. Removing unreachable codes
Introduction to Compiler Design Theory Page 17
5. Target Code Generator
 중간 코드로부터 machine instruction을 생성.
 Code generator tasks
1. instruction selection & generation
2. register management
3. storage allocation
4. code optimization (Machine-dependent optimization)
Code Generator
Intermediate
Code
Target
Code
Introduction to Compiler Design Theory Page 18
6. Error Recovery
 Error Handling
 Error detection
 Error recovery
 Error reporting
 Error repair
 Error
 Syntax Error
 Semantic Error
 Run-time Error
Introduction to Compiler Design Theory Page 19
컴파일러 자동화 도구
 Compiler Generating Tools
(= Compiler-Compiler, Translator Writing System)
 language와 machine이 발달할 수록 많은 compiler가 필요.
 새로운 언어를 개발하는 이유: 컴퓨터의 응용 분야가 넓어지므로.
 N개 language를 M개 컴퓨터에서 구현하려면
N*M개의 컴파일러가 필요.
ex) 2개의 language : C, Ada
3개의 Machine : IBM, SPARC, Pentium
C-to-IBM, C-to-SPARC, C-to-Pentium
Java-to-IBM, Java-to-SPARC, Java-to-Pentium
Introduction to Compiler Design Theory Page 20
 Compiler-compiler Model
 Language description은 grammar theory를 이용하고 있으나,
Machine description은 정형화가 이루어져 있지 않은 상태임.
 HDL : Hardware Description Language
 Computer Architecture를 design하는 데 사용.
 Machine architecture와 programming language의 발전에 따라
automatic compiler generation이 연구됨.
Compiler
- Compiler Compiler
Language
Description : L
Machine
Description : M
program written in L
executable form on M
Introduction to Compiler Design Theory Page 21
1. Lexical Analyzer Generator
 LEX : 1975년에 M. E. Lesk 가 고안.
 입력 스트림에서 정규표현으로 기술된 토큰들을 찾아내는
프로그램을 작성하는데 유용한 도구.
LEX Lexical Analyzer
(Scanner)
Token Structure
(regular expression)
Source program
Token Stream
Introduction to Compiler Design Theory Page 22
2. Parser Generator(PGS: Parser Generating System)
(1) Stanford PGS
 John Hennessy
 파스칼 언어로 쓰여 있음 : 5000 lines
 특징 : 구문 구조를 AST 형태로 얻음.
 Output : Abstract Syntax Tree(AST)의 정보를 포함한 파싱 테이블을 출력.
PGS
Language
description
(grammar를
이용하여 기술)
tokens
program
structures
Driver
Routines
Tables
Parser
Introduction to Compiler Design Theory Page 23
(2) Wisconsin PGS
 C.N. Fisher
 파스칼 언어로 쓰여 있음.: 10000 lines
 특징 : error recovery
(3) YACC(Yet Another Compiler Compiler)
 S.C. Johnson
 C language로 쓰여 있음. UNIX에서 수행.
Scanner Parser
LEX YACC
tokensSource
Program
Result by
Action Code
lex.yy.c y.tab.c
Regular Expression
+ Action code
Grammar Rule
+ Action code
Introduction to Compiler Design Theory Page 24
3. Automatic Code Generation
 Three aspects
1. Machine Description : ISP, ISPS, HDL
2. Intermediate language
3. Code generating algorithm
 CGA
Pattern matching code generation
Table driven code generation
CGG Code Generator
Machine
Description
Intermediate Code
Target Code
Introduction to Compiler Design Theory Page 25
4. Compiler Compiler System
(1) PQCC(Production Quality Compiler Compiler System)
 W.A. Wulf(Carnegie-Mellon University)
 input으로 language description과 target machine description을 받
아 PQC(Production Quality Compiler)와 table이 output됨.
 중간 언어로 tree구조인 TCOL을 사용.
 Pattern Matching Code Generation에 의해 code를 생성함.
(2) ACK(Amsterdam Compiler Kit)
 Vrije 대학의 Andrew S. Tanenbaum을 중심으로 개발된 Compiler
의 Back-End 자동화 도구.
 UNCOL 개념에서 출발.
 EM이라는 Abstract Machine Code를 중간 언어로 사용.
 Portable Compiler를 만들기에 편리.
Introduction to Compiler Design Theory Page 26
 ACK Model
Front -End Back -End
EM
FORTRAN
ALGOL
PASCAL
C
ADA
Interpreter
Intel 8080/8086/80386
Motorola 6800/6809/
68000/68020
Zilog Z80/Z8000
VAX
SPARC
Result

More Related Content

Viewers also liked

Ch10
Ch10Ch10
Ch10
Hankyo
 
Ch11
Ch11Ch11
Ch11
Hankyo
 
Ch02
Ch02Ch02
Ch02
Hankyo
 
01.표준프레임워크개요
01.표준프레임워크개요01.표준프레임워크개요
01.표준프레임워크개요
Hankyo
 
Ch07
Ch07Ch07
Ch07
Hankyo
 
Ch03
Ch03Ch03
Ch03
Hankyo
 
Ch04
Ch04Ch04
Ch04
Hankyo
 
03.[참고]표준프레임워크기반 개발방법
03.[참고]표준프레임워크기반 개발방법03.[참고]표준프레임워크기반 개발방법
03.[참고]표준프레임워크기반 개발방법
Hankyo
 
01.모바일 프레임워크 이론
01.모바일 프레임워크 이론01.모바일 프레임워크 이론
01.모바일 프레임워크 이론
Hankyo
 
20160223共好 狼學
20160223共好 狼學20160223共好 狼學
20160223共好 狼學
Seaneen Chen
 
Chamada pública nº 1 de 2016 alterado
Chamada pública nº 1 de 2016 alteradoChamada pública nº 1 de 2016 alterado
Chamada pública nº 1 de 2016 alterado
Dom Aquino
 
Internet connection
Internet connectionInternet connection
Internet connection
iiiauto13
 
Jakes Portfolio Presentation
Jakes Portfolio PresentationJakes Portfolio Presentation
Jakes Portfolio Presentation
Jake Landmesser
 
Internet connection
Internet connectionInternet connection
Internet connection
iiiauto13
 
IDs Essay
IDs EssayIDs Essay
02.공통컴포넌트 실습교재
02.공통컴포넌트 실습교재02.공통컴포넌트 실습교재
02.공통컴포넌트 실습교재
Hankyo
 

Viewers also liked (16)

Ch10
Ch10Ch10
Ch10
 
Ch11
Ch11Ch11
Ch11
 
Ch02
Ch02Ch02
Ch02
 
01.표준프레임워크개요
01.표준프레임워크개요01.표준프레임워크개요
01.표준프레임워크개요
 
Ch07
Ch07Ch07
Ch07
 
Ch03
Ch03Ch03
Ch03
 
Ch04
Ch04Ch04
Ch04
 
03.[참고]표준프레임워크기반 개발방법
03.[참고]표준프레임워크기반 개발방법03.[참고]표준프레임워크기반 개발방법
03.[참고]표준프레임워크기반 개발방법
 
01.모바일 프레임워크 이론
01.모바일 프레임워크 이론01.모바일 프레임워크 이론
01.모바일 프레임워크 이론
 
20160223共好 狼學
20160223共好 狼學20160223共好 狼學
20160223共好 狼學
 
Chamada pública nº 1 de 2016 alterado
Chamada pública nº 1 de 2016 alteradoChamada pública nº 1 de 2016 alterado
Chamada pública nº 1 de 2016 alterado
 
Internet connection
Internet connectionInternet connection
Internet connection
 
Jakes Portfolio Presentation
Jakes Portfolio PresentationJakes Portfolio Presentation
Jakes Portfolio Presentation
 
Internet connection
Internet connectionInternet connection
Internet connection
 
IDs Essay
IDs EssayIDs Essay
IDs Essay
 
02.공통컴포넌트 실습교재
02.공통컴포넌트 실습교재02.공통컴포넌트 실습교재
02.공통컴포넌트 실습교재
 

Similar to 컴파일러 Ch01

[170403 2주차]C언어 A반
[170403 2주차]C언어 A반[170403 2주차]C언어 A반
[170403 2주차]C언어 A반
arundine
 
The Future of C# and .NET Framework
The Future of C# and .NET FrameworkThe Future of C# and .NET Framework
The Future of C# and .NET Framework
명신 김
 
6. code level reversing
6. code level reversing6. code level reversing
6. code level reversing
Youngjun Chang
 
Bash-as-a-Interpreter
Bash-as-a-InterpreterBash-as-a-Interpreter
Bash-as-a-Interpreter
eva
 
4. reverse engineering basic
4. reverse engineering basic4. reverse engineering basic
4. reverse engineering basic
Youngjun Chang
 
프로젝트 아나키로 Rpg 만들기 프로그래밍
프로젝트 아나키로 Rpg 만들기 프로그래밍프로젝트 아나키로 Rpg 만들기 프로그래밍
프로젝트 아나키로 Rpg 만들기 프로그래밍
Alex Kang
 
왜 개발자는 컴퓨터공학을 공부해야 할까? (비전공자는 컴퓨터공학 과목에서 무엇을 알아야할까?)
왜 개발자는 컴퓨터공학을 공부해야 할까? (비전공자는 컴퓨터공학 과목에서 무엇을 알아야할까?)왜 개발자는 컴퓨터공학을 공부해야 할까? (비전공자는 컴퓨터공학 과목에서 무엇을 알아야할까?)
왜 개발자는 컴퓨터공학을 공부해야 할까? (비전공자는 컴퓨터공학 과목에서 무엇을 알아야할까?)
Covenant Ko
 
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019min woog kim
 
llvm 소개
llvm 소개llvm 소개
llvm 소개
Minhyuk Kwon
 
C언어강의 발표자료 1강.pptx
C언어강의 발표자료 1강.pptxC언어강의 발표자료 1강.pptx
C언어강의 발표자료 1강.pptx
Daniel Shin
 
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravelXECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XpressEngine
 
처음 시작하는 라라벨
처음 시작하는 라라벨처음 시작하는 라라벨
처음 시작하는 라라벨
KwangSeob Jeong
 
프로그래밍 언어의 기본 개념과 주요 프로그래밍 언어
프로그래밍 언어의 기본 개념과 주요 프로그래밍 언어프로그래밍 언어의 기본 개념과 주요 프로그래밍 언어
프로그래밍 언어의 기본 개념과 주요 프로그래밍 언어
Bizmerce Corp
 
임베디드 소프트웨어 개발에 아키텍처 프랙티스 도입
임베디드 소프트웨어 개발에 아키텍처 프랙티스 도입임베디드 소프트웨어 개발에 아키텍처 프랙티스 도입
임베디드 소프트웨어 개발에 아키텍처 프랙티스 도입
Chanjin Park
 
Tech Update - The Future of .NET Framework (김명신 부장)
Tech Update - The Future of .NET Framework (김명신 부장)Tech Update - The Future of .NET Framework (김명신 부장)
Tech Update - The Future of .NET Framework (김명신 부장)
Eunbee Song
 
안드로이드 개발하기_1st
안드로이드 개발하기_1st안드로이드 개발하기_1st
안드로이드 개발하기_1st
EunGi Hong
 
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
복연 이
 
[Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)
[Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)[Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)
[Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)
Sang Don Kim
 
강좌 04 펌웨어 구조 설계
강좌 04 펌웨어 구조 설계강좌 04 펌웨어 구조 설계
강좌 04 펌웨어 구조 설계
chcbaram
 
좋은 개발자 되기
좋은 개발자 되기좋은 개발자 되기
좋은 개발자 되기
Sunghyouk Bae
 

Similar to 컴파일러 Ch01 (20)

[170403 2주차]C언어 A반
[170403 2주차]C언어 A반[170403 2주차]C언어 A반
[170403 2주차]C언어 A반
 
The Future of C# and .NET Framework
The Future of C# and .NET FrameworkThe Future of C# and .NET Framework
The Future of C# and .NET Framework
 
6. code level reversing
6. code level reversing6. code level reversing
6. code level reversing
 
Bash-as-a-Interpreter
Bash-as-a-InterpreterBash-as-a-Interpreter
Bash-as-a-Interpreter
 
4. reverse engineering basic
4. reverse engineering basic4. reverse engineering basic
4. reverse engineering basic
 
프로젝트 아나키로 Rpg 만들기 프로그래밍
프로젝트 아나키로 Rpg 만들기 프로그래밍프로젝트 아나키로 Rpg 만들기 프로그래밍
프로젝트 아나키로 Rpg 만들기 프로그래밍
 
왜 개발자는 컴퓨터공학을 공부해야 할까? (비전공자는 컴퓨터공학 과목에서 무엇을 알아야할까?)
왜 개발자는 컴퓨터공학을 공부해야 할까? (비전공자는 컴퓨터공학 과목에서 무엇을 알아야할까?)왜 개발자는 컴퓨터공학을 공부해야 할까? (비전공자는 컴퓨터공학 과목에서 무엇을 알아야할까?)
왜 개발자는 컴퓨터공학을 공부해야 할까? (비전공자는 컴퓨터공학 과목에서 무엇을 알아야할까?)
 
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
 
llvm 소개
llvm 소개llvm 소개
llvm 소개
 
C언어강의 발표자료 1강.pptx
C언어강의 발표자료 1강.pptxC언어강의 발표자료 1강.pptx
C언어강의 발표자료 1강.pptx
 
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravelXECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
 
처음 시작하는 라라벨
처음 시작하는 라라벨처음 시작하는 라라벨
처음 시작하는 라라벨
 
프로그래밍 언어의 기본 개념과 주요 프로그래밍 언어
프로그래밍 언어의 기본 개념과 주요 프로그래밍 언어프로그래밍 언어의 기본 개념과 주요 프로그래밍 언어
프로그래밍 언어의 기본 개념과 주요 프로그래밍 언어
 
임베디드 소프트웨어 개발에 아키텍처 프랙티스 도입
임베디드 소프트웨어 개발에 아키텍처 프랙티스 도입임베디드 소프트웨어 개발에 아키텍처 프랙티스 도입
임베디드 소프트웨어 개발에 아키텍처 프랙티스 도입
 
Tech Update - The Future of .NET Framework (김명신 부장)
Tech Update - The Future of .NET Framework (김명신 부장)Tech Update - The Future of .NET Framework (김명신 부장)
Tech Update - The Future of .NET Framework (김명신 부장)
 
안드로이드 개발하기_1st
안드로이드 개발하기_1st안드로이드 개발하기_1st
안드로이드 개발하기_1st
 
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
 
[Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)
[Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)[Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)
[Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)
 
강좌 04 펌웨어 구조 설계
강좌 04 펌웨어 구조 설계강좌 04 펌웨어 구조 설계
강좌 04 펌웨어 구조 설계
 
좋은 개발자 되기
좋은 개발자 되기좋은 개발자 되기
좋은 개발자 되기
 

More from Hankyo

01.실행환경 실습교재(공통기반)
01.실행환경 실습교재(공통기반)01.실행환경 실습교재(공통기반)
01.실행환경 실습교재(공통기반)
Hankyo
 
01.공통컴포넌트 교육교재
01.공통컴포넌트 교육교재01.공통컴포넌트 교육교재
01.공통컴포넌트 교육교재
Hankyo
 
01.개발환경 교육교재
01.개발환경 교육교재01.개발환경 교육교재
01.개발환경 교육교재
Hankyo
 
07.실행환경 교육교재(표준프레임워크 세부 적용기준)
07.실행환경 교육교재(표준프레임워크 세부 적용기준)07.실행환경 교육교재(표준프레임워크 세부 적용기준)
07.실행환경 교육교재(표준프레임워크 세부 적용기준)
Hankyo
 
06.실행환경 실습교재(easy company,해답)
06.실행환경 실습교재(easy company,해답)06.실행환경 실습교재(easy company,해답)
06.실행환경 실습교재(easy company,해답)
Hankyo
 
06.실행환경 실습교재(easy company,문제)
06.실행환경 실습교재(easy company,문제)06.실행환경 실습교재(easy company,문제)
06.실행환경 실습교재(easy company,문제)
Hankyo
 
05.실행환경 교육교재(업무처리,연계통합)
05.실행환경 교육교재(업무처리,연계통합)05.실행환경 교육교재(업무처리,연계통합)
05.실행환경 교육교재(업무처리,연계통합)
Hankyo
 
04.실행환경 실습교재(화면처리)
04.실행환경 실습교재(화면처리)04.실행환경 실습교재(화면처리)
04.실행환경 실습교재(화면처리)
Hankyo
 
04.실행환경 교육교재(화면처리)
04.실행환경 교육교재(화면처리)04.실행환경 교육교재(화면처리)
04.실행환경 교육교재(화면처리)
Hankyo
 
04.모바일 device api_실습교재
04.모바일 device api_실습교재04.모바일 device api_실습교재
04.모바일 device api_실습교재
Hankyo
 
04.[참고]개발환경 실습교재
04.[참고]개발환경 실습교재04.[참고]개발환경 실습교재
04.[참고]개발환경 실습교재
Hankyo
 
03.실행환경 실습교재(배치처리)
03.실행환경 실습교재(배치처리)03.실행환경 실습교재(배치처리)
03.실행환경 실습교재(배치처리)
Hankyo
 
03.실행환경 교육교재(배치처리)
03.실행환경 교육교재(배치처리)03.실행환경 교육교재(배치처리)
03.실행환경 교육교재(배치처리)
Hankyo
 
03.모바일 실습교재(모바일 공통컴포넌트 실습)
03.모바일 실습교재(모바일 공통컴포넌트 실습)03.모바일 실습교재(모바일 공통컴포넌트 실습)
03.모바일 실습교재(모바일 공통컴포넌트 실습)
Hankyo
 
03.[참고]개발환경 교육교재
03.[참고]개발환경 교육교재03.[참고]개발환경 교육교재
03.[참고]개발환경 교육교재
Hankyo
 
02.실행환경 실습교재(데이터처리)
02.실행환경 실습교재(데이터처리)02.실행환경 실습교재(데이터처리)
02.실행환경 실습교재(데이터처리)
Hankyo
 
02.실행환경 교육교재(데이터처리)
02.실행환경 교육교재(데이터처리)02.실행환경 교육교재(데이터처리)
02.실행환경 교육교재(데이터처리)
Hankyo
 
02.모바일 실습교재(ux component)
02.모바일 실습교재(ux component)02.모바일 실습교재(ux component)
02.모바일 실습교재(ux component)
Hankyo
 
02.개발환경 실습교재
02.개발환경 실습교재02.개발환경 실습교재
02.개발환경 실습교재
Hankyo
 
02.[참고]오픈소스sw라이선스가이드라인
02.[참고]오픈소스sw라이선스가이드라인02.[참고]오픈소스sw라이선스가이드라인
02.[참고]오픈소스sw라이선스가이드라인
Hankyo
 

More from Hankyo (20)

01.실행환경 실습교재(공통기반)
01.실행환경 실습교재(공통기반)01.실행환경 실습교재(공통기반)
01.실행환경 실습교재(공통기반)
 
01.공통컴포넌트 교육교재
01.공통컴포넌트 교육교재01.공통컴포넌트 교육교재
01.공통컴포넌트 교육교재
 
01.개발환경 교육교재
01.개발환경 교육교재01.개발환경 교육교재
01.개발환경 교육교재
 
07.실행환경 교육교재(표준프레임워크 세부 적용기준)
07.실행환경 교육교재(표준프레임워크 세부 적용기준)07.실행환경 교육교재(표준프레임워크 세부 적용기준)
07.실행환경 교육교재(표준프레임워크 세부 적용기준)
 
06.실행환경 실습교재(easy company,해답)
06.실행환경 실습교재(easy company,해답)06.실행환경 실습교재(easy company,해답)
06.실행환경 실습교재(easy company,해답)
 
06.실행환경 실습교재(easy company,문제)
06.실행환경 실습교재(easy company,문제)06.실행환경 실습교재(easy company,문제)
06.실행환경 실습교재(easy company,문제)
 
05.실행환경 교육교재(업무처리,연계통합)
05.실행환경 교육교재(업무처리,연계통합)05.실행환경 교육교재(업무처리,연계통합)
05.실행환경 교육교재(업무처리,연계통합)
 
04.실행환경 실습교재(화면처리)
04.실행환경 실습교재(화면처리)04.실행환경 실습교재(화면처리)
04.실행환경 실습교재(화면처리)
 
04.실행환경 교육교재(화면처리)
04.실행환경 교육교재(화면처리)04.실행환경 교육교재(화면처리)
04.실행환경 교육교재(화면처리)
 
04.모바일 device api_실습교재
04.모바일 device api_실습교재04.모바일 device api_실습교재
04.모바일 device api_실습교재
 
04.[참고]개발환경 실습교재
04.[참고]개발환경 실습교재04.[참고]개발환경 실습교재
04.[참고]개발환경 실습교재
 
03.실행환경 실습교재(배치처리)
03.실행환경 실습교재(배치처리)03.실행환경 실습교재(배치처리)
03.실행환경 실습교재(배치처리)
 
03.실행환경 교육교재(배치처리)
03.실행환경 교육교재(배치처리)03.실행환경 교육교재(배치처리)
03.실행환경 교육교재(배치처리)
 
03.모바일 실습교재(모바일 공통컴포넌트 실습)
03.모바일 실습교재(모바일 공통컴포넌트 실습)03.모바일 실습교재(모바일 공통컴포넌트 실습)
03.모바일 실습교재(모바일 공통컴포넌트 실습)
 
03.[참고]개발환경 교육교재
03.[참고]개발환경 교육교재03.[참고]개발환경 교육교재
03.[참고]개발환경 교육교재
 
02.실행환경 실습교재(데이터처리)
02.실행환경 실습교재(데이터처리)02.실행환경 실습교재(데이터처리)
02.실행환경 실습교재(데이터처리)
 
02.실행환경 교육교재(데이터처리)
02.실행환경 교육교재(데이터처리)02.실행환경 교육교재(데이터처리)
02.실행환경 교육교재(데이터처리)
 
02.모바일 실습교재(ux component)
02.모바일 실습교재(ux component)02.모바일 실습교재(ux component)
02.모바일 실습교재(ux component)
 
02.개발환경 실습교재
02.개발환경 실습교재02.개발환경 실습교재
02.개발환경 실습교재
 
02.[참고]오픈소스sw라이선스가이드라인
02.[참고]오픈소스sw라이선스가이드라인02.[참고]오픈소스sw라이선스가이드라인
02.[참고]오픈소스sw라이선스가이드라인
 

컴파일러 Ch01

  • 1. 제 1 장 컴파일러 개론 컴파일러 입문
  • 2. 목 차  1.1 프로그래밍 언어  1.2 번역기와 컴파일러  1.3 컴파일러의 일반적인 구조  1.4 컴파일러 자동화 도구 Introduction to Compiler Design Theory Page 2
  • 3. 컴파일러란??  고급 언어로 쓰여진 프로그램을 컴퓨터에서 실행시키기 위한 언어 번역기 (translator) 중의 하나  고급 언어 프로그램을 입력으로 받아  의미적으로 동등하면서  직접 기계에서 실행될 수 있는 형태로 번역하는 작업을 수행  효율적인 컴파일러 제작을 위해 multi-pass 형태로 제작 Introduction to Compiler Design Theory Page 3
  • 4. Introduction to Compiler Design Theory Page 4 프로그래밍 언어  좋은 프로그래밍 언어의 요건  언어의 개념이 명확  문법적인 구조(syntax)  의미(semantics)  프로그래머의 생각을 자연스럽게 표현  호환성(이식성), 신뢰성, 모듈화, 효율성  언어의 확장성이 우수  좋은 프로그래밍 환경
  • 5. 프로그래밍 언어  특수 목적 언어(special purpose programming language)  컴퓨터의 특정 응용 분야에 적합하도록 고안된 언어  일반 범용 언어(general purpose programming language)  모든 컴퓨터 응용 분야에 적합하도록 고안된 언어  저급언어(low-level language)와 고급언어(high-level language)  고급언어의 장점 : 생산성(productivity), 이식성(protability), debugging 용이,  주력 언어의 변천 과정  COBOL, FORTRAN, ALGOL, Ada  Pascal, C, C++, Java, C#  인터넷 프로그램 등등등등등 Introduction to Compiler Design Theory Page 5
  • 6. Introduction to Compiler Design Theory Page 6 번역기와 컴파일러  Compiler “A compiler is a computer program which translates programs written in a particular high-level programming language into executable code for a specific target computer.” ex) C compiler on SPARC  C program을 입력으로 받아 SPARC에서 수행 가능한 코드를 출력한다. Compiler Source Program Object Program (Assembly Language, Machine Language)
  • 7. Introduction to Compiler Design Theory Page 7  Compiler Structure  Front-End : language dependent part  Back-End : machine dependent part Source Programs Object Programs Front-End Back-End Intermediate Code
  • 8. Introduction to Compiler Design Theory Page 8 Cross-Compiler “A cross-compiler is a program which is to run on machine A and produce target code for another machine B.” Compiler on A machine Source Programs Target Code for machine B
  • 9. Introduction to Compiler Design Theory Page 9 Interpreter “An interpreter transforms a program directly into a sequence of machine actions and produces the results of the program.”  Compiler : Operational System  Interpreter : Developing System or Educational System Interpreter data Result Source Programs
  • 10. Introduction to Compiler Design Theory Page 10  Preprocessor  for the language extension  Macro substitution  Conditional compilation  Inclusion of files Preprocessor Translator Source Program Target Programs Extended Source Program
  • 11. Introduction to Compiler Design Theory Page 11 일반적인 컴파일러 구조 Source Programs Object Programs Lexical Analyzer Syntax Analyzer Intermediate Code Generator Code Optimizer Target Code Generator Token Tree Intermediate Code Optimized Code I.C. : Intermediate Code O.C. : Optimized Code
  • 12. Introduction to Compiler Design Theory Page 12 1. Lexical Analyzer(Scanner)  입력 : 원시 프로그램, 출력 : tokens  token : 문법적으로 의미를 갖는 최소 단위  컴파일러 내부에서 효율적이며 다루기 쉬운 정수로 바꾸어 줌. ex) if ( a > 10 ) ... Token : if ( a > 10 ) ... Token Number : 32 7 4 25 5 8 Scanner Source Programs A sequence of tokens
  • 13. Introduction to Compiler Design Theory Page 13 2. Syntax Analyzer(Parser)  기능: Syntax checking, Tree generation.  출력: incorrect - error message 출력 correct - program structure (=> tree 형태) 출력 ex) if (a > 10) a = 1; if > = a 10 a 1 ParserTokens Tree
  • 14. Introduction to Compiler Design Theory Page 14 3. Intermediate Code Generator  입력 : 파스 트리, 출력 : 중간 코드  Semantic checking ex) if (a > 10) a = 1.0; ☞ a가 정수일 때 semantic error ! ex) a = b + 1; Tree : = a + b 1 Ucode: lod 1 2 ldc 10 add str 1 1 - variable reference: (base, offset)
  • 15. Introduction to Compiler Design Theory Page 15 4. Code Optimizer  Optional phase  비효율적인 code를 구분해 내서 더 효율적인 code로 변환  Meaning of optimization  major part : improve running time  minor part : reduce code size ex) LDC R1, 1 LDC R1, 1 (x)  Criteria for optimization  preserve the program meanings  speed up on average  be worth the effort
  • 16. Introduction to Compiler Design Theory Page 16  Local optimization  local inspection을 통하여 inefficient한 code들을 구분해 내서 좀 더 efficient한 code들로 바꾸는 방법. 1. Constant folding 2. Eliminating redundant load, store instructions 3. Algebraic simplification 4. Strength reduction  Global optimization  flow analysis technique을 이용 1. Common subexpression 2. Moving loop invariants 3. Removing unreachable codes
  • 17. Introduction to Compiler Design Theory Page 17 5. Target Code Generator  중간 코드로부터 machine instruction을 생성.  Code generator tasks 1. instruction selection & generation 2. register management 3. storage allocation 4. code optimization (Machine-dependent optimization) Code Generator Intermediate Code Target Code
  • 18. Introduction to Compiler Design Theory Page 18 6. Error Recovery  Error Handling  Error detection  Error recovery  Error reporting  Error repair  Error  Syntax Error  Semantic Error  Run-time Error
  • 19. Introduction to Compiler Design Theory Page 19 컴파일러 자동화 도구  Compiler Generating Tools (= Compiler-Compiler, Translator Writing System)  language와 machine이 발달할 수록 많은 compiler가 필요.  새로운 언어를 개발하는 이유: 컴퓨터의 응용 분야가 넓어지므로.  N개 language를 M개 컴퓨터에서 구현하려면 N*M개의 컴파일러가 필요. ex) 2개의 language : C, Ada 3개의 Machine : IBM, SPARC, Pentium C-to-IBM, C-to-SPARC, C-to-Pentium Java-to-IBM, Java-to-SPARC, Java-to-Pentium
  • 20. Introduction to Compiler Design Theory Page 20  Compiler-compiler Model  Language description은 grammar theory를 이용하고 있으나, Machine description은 정형화가 이루어져 있지 않은 상태임.  HDL : Hardware Description Language  Computer Architecture를 design하는 데 사용.  Machine architecture와 programming language의 발전에 따라 automatic compiler generation이 연구됨. Compiler - Compiler Compiler Language Description : L Machine Description : M program written in L executable form on M
  • 21. Introduction to Compiler Design Theory Page 21 1. Lexical Analyzer Generator  LEX : 1975년에 M. E. Lesk 가 고안.  입력 스트림에서 정규표현으로 기술된 토큰들을 찾아내는 프로그램을 작성하는데 유용한 도구. LEX Lexical Analyzer (Scanner) Token Structure (regular expression) Source program Token Stream
  • 22. Introduction to Compiler Design Theory Page 22 2. Parser Generator(PGS: Parser Generating System) (1) Stanford PGS  John Hennessy  파스칼 언어로 쓰여 있음 : 5000 lines  특징 : 구문 구조를 AST 형태로 얻음.  Output : Abstract Syntax Tree(AST)의 정보를 포함한 파싱 테이블을 출력. PGS Language description (grammar를 이용하여 기술) tokens program structures Driver Routines Tables Parser
  • 23. Introduction to Compiler Design Theory Page 23 (2) Wisconsin PGS  C.N. Fisher  파스칼 언어로 쓰여 있음.: 10000 lines  특징 : error recovery (3) YACC(Yet Another Compiler Compiler)  S.C. Johnson  C language로 쓰여 있음. UNIX에서 수행. Scanner Parser LEX YACC tokensSource Program Result by Action Code lex.yy.c y.tab.c Regular Expression + Action code Grammar Rule + Action code
  • 24. Introduction to Compiler Design Theory Page 24 3. Automatic Code Generation  Three aspects 1. Machine Description : ISP, ISPS, HDL 2. Intermediate language 3. Code generating algorithm  CGA Pattern matching code generation Table driven code generation CGG Code Generator Machine Description Intermediate Code Target Code
  • 25. Introduction to Compiler Design Theory Page 25 4. Compiler Compiler System (1) PQCC(Production Quality Compiler Compiler System)  W.A. Wulf(Carnegie-Mellon University)  input으로 language description과 target machine description을 받 아 PQC(Production Quality Compiler)와 table이 output됨.  중간 언어로 tree구조인 TCOL을 사용.  Pattern Matching Code Generation에 의해 code를 생성함. (2) ACK(Amsterdam Compiler Kit)  Vrije 대학의 Andrew S. Tanenbaum을 중심으로 개발된 Compiler 의 Back-End 자동화 도구.  UNCOL 개념에서 출발.  EM이라는 Abstract Machine Code를 중간 언어로 사용.  Portable Compiler를 만들기에 편리.
  • 26. Introduction to Compiler Design Theory Page 26  ACK Model Front -End Back -End EM FORTRAN ALGOL PASCAL C ADA Interpreter Intel 8080/8086/80386 Motorola 6800/6809/ 68000/68020 Zilog Z80/Z8000 VAX SPARC Result