1. 컴파일러(Compiler)
- 특정 프로그래밍 언어로 쓰여 있는 문서를 다른 프로그래밍 언어 혹은 컴퓨터 언어로 옮기는, 일종의 번역 프로그램.
- 비주얼, 터보, 볼랜드 등 언어에 따라 다양한 컴파일러 종류가 존재한다.
- 보통 high-level 프로그래밍 언어를 실행 프로그램으로 만들기 위한 lower level언어(ex 어셈블리 언어, object 코드, 등)로 바꾸는 데에 사용
- 원래의 문서를 '소스 코드' 혹은 원시 코드라고 부름
- 출력된 문서를 '목적 코드'라고 부름
1) 컴파일러 실행 단계
(1) 구문 분석 : 소스 코드 파일을 읽어 추상 구문 트리 생성, 문법에 맞지 않는 소스 코드는 사용자에게 알림
(2) 최적화 : 추상 구문 트리 분석 및 최적화.
(3) 코드 생성 : 목적 코드 생성.(기계어 번역의 경우 레지스터 할당, 연산 순서 바꾸기 외)
(4) 링킹 : 기계어 번역의 경우, 여러 라이브러리의 목적 코드를 묶어 하나의 실행파일 생성.
- 일부는 이 과정을 컴파일 과정에서 제외함.
2) 컴파일 과정
(1) 전처리기(Prrprocessor) : #include 등 #이 붙은 전처리기 구문을 처리.
(2) 컴파일러로 컴파일
(3) 어셈블러(Assembler) : 완전히 기계어로 바꾸어주는 역할
(4) 링커(Linker) 여러 개의 오브젝트 파일을 하나로 합치거나, 라이브러리를 합침
3) 컴파일러의 필수 조건
(1) 컴파일러는 옮김의 과정에서 프로그램의 뜻을 보존하여야 함
즉, 입력받은 프로그램의 의미를 충실히 따라야 함
(2) 컴파일러는 입력으로 들어온 프로그램을 실용적으로 개선해야 함
4) 컴파일러의 기능
(1) 고급언어를 직접 기계어 코드로 변환
(2) 자바의 경우 바이트 코드로 변환한다. 중간단계의 코드를 생성하고 이를 해석하여 실행
자바는 마이크로프로세서에서 실행되도록 개발되었기 때문.
- 장점 : 한 번 컴파일된 바이트 코드는 다른 플랫폼에서 재컴파일 없이 실행할 수 있음.
- 단점 : 바이트 코드를 해석해서 실행할 프로그램 구조가 필요. 직접 기계어 코드 실행시보다 느림
(3) C/C++의 경우 직접 기계어 코드로 변환
(4) 마이크로프로세서는 각각 다른 기계어 코드를 가지고 있기에, 다른 기계어 코드를 생성해야 함
즉, 마이크로프로세서에 맞는 컴파일러를 사용해야 함
'CS > CS' 카테고리의 다른 글
[CS] 디자인 패턴이란? (0) | 2022.09.20 |
---|---|
[CS] 캐시(Cache)란? (0) | 2021.12.12 |
[CS] 코딩 할 때 단어 표기법(camelCase, snake_case, UpperCase .,) (0) | 2021.12.07 |
[CS] 자료구조란? 알고리즘이란? (0) | 2021.11.18 |
[CS] 절차지향 vs 객체지향 (0) | 2021.11.18 |
야나의 코딩 일기장 :) #코딩블로그 #기술블로그 #코딩 #조금씩,꾸준히
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!