[프로그래밍] 01. 컴파일러(compiler)

Seoeun Park·2024년 4월 16일

CS

목록 보기
1/10

crying_satan

ㅋㅋ사탄 실직 완.


🖥️ 컴파일러란?

고급 프로그래밍 언어로 작성한 원시 코드 (Source Code)를 컴퓨터 내부에서 사용 가능한 언어인 기계어 (Machine Language)로 '번역'하고, 이를 실행가능(Excecutable)하게 만들어주는 프로그램이다.
컴파일러를 사용하는 언어의 종류로는 C, C++, C#, Java 등이 있다.

※ 넓은 의미로, 전체 과정을 빌드(build)라고도 함.


🖥️ 언어 번역기 처리 과정


🖥️ 컴파일 논리적 단계 구분

명칭설명
어휘 분석(Lexical Analysis)원시 코드를 기종마다 다른 고유의 문자열(Token)으로 변환. 즉 구성하는 문자들을 단어로 분리하여 어휘 요소로 생성하며 설계가 간단함.
구문 분석(Syntax Analysis)BNF/EBNF 문법 기반으로 Token을 입력하여 추상 구문 형태로 출력. 즉 어휘 요소들을 문장으로 구성하여 문법적으로 검사하고,이를 트리 형태(Parse Tree)로 만들어 분석.
의미 분석(Semantic Analysis)식별자의 선언 여부, 타입 등 문장이 의미적으로 올바른지 검사하고, 변수의 정의와 사용, 함수 호출 등을 분석
중간 코드 생성(Intermediate Code Generation)검증된 소스 코드를 이해하기 쉬운 중간 코드 형태로 변환. macro를 포함한 어셈블리어 형태
코드 최적화(Code Optimization)*지역최적화와 *전역최적화로 나뉘며, 중간 코드를 효율적으로 실행할 수 있도록 최적화함.
💥기계어 코드 생성(Code Generation)매크로 처리기와 어셈블러의 결합 형태로 처리. 최적화된 중간 코드를 기계어로 번역하여 실행 파일 생성
*지역최적화 : 중복 load, store명령의 제거, 불필요한 코드의 삭제, 제어흐름의 최적화, 식(expression)의 대수적 간소화, 연산의 세기경감, 상수전파(constant folding/propagation), 복사전파(copy propagation), 공통부분식(common subexpression) 제거, 결합변형 등이 있음.
*전역최적화: 코드이동(code motion), 귀납변수(induction variable) 최적화, 루프융합(loop fusion/jamming), 루프전개(loop unrolling) 등이 있음.
💥생성된 object code가 바로 실행될 수 없이 loader에 의하여 executable code로 변환되어야 한다.

🖥️ 컴파일러의 종류

  • 전처리기 : 프로그래밍 언어에 유용한 기능들을 추가하여 언어를 확장시켜 주는 역할을 함. 확장 및 추가된 기능들을 순수한 고급언어로 바꿔주는 번역기.
  • 컴파일러 : FORTRAN, COBOL, PASCAL, C 등의 고급언어로 작성된 프로그램을 어셈블리어나 기계어로 번역하는 번역기
  • 어셈블러 : 기계어와 1:1로 대응되는 기호식 표현(Mnemonic)인 어셈블리어로 작성된 프로그램을 그에 대응하는 기계어로 번역해주는 번역기
  • 인터프리터 : 번역과 동시에 실행
  • Cross-Compiler : 컴파일러가 실행되는 컴퓨터가 아닌 다른 컴퓨터의 실행코드를 생성
  • Simulation : 다른 컴퓨터(상황) 등을 가상 Data로 실행하여 결과를 예측

출처 :
http://www.ktword.co.kr/test/view/view.php?m_temp1=1436
https://devparker.tistory.com/110
컴파일의 필요성(http://elearning.kocw.net/contents4/document/lec/2013/Gachon/Lee%20Sangsun2/3.pdf)

profile
게임 개발 공부 시작!

0개의 댓글