2021. 6. 28. 23:54ㆍ개발 관련 학습정리/컴파일러 만들기 (이론)
소스코드에서 기계어까지
사용자가 개발한 소스코드
전처리
컴파일러에 적용 되기 전, 전처리문을 해석하여 컴파일러에 전달하는 역할을 한다.
C언어에서의#include
,#ifndef
등이 해당된다.컴파일러
전처리된 소스를 넘겨받아 어셈블리 프로그램으로 만들어 준다.
이에 대한 과정은 복잡하므로 밑에 컴파일러 동작 과정을 다시 설명할 예정이다.어셈블러
어셈블러는 어셈블리 코드를 컴퓨터가 이해할 수 있는 목적 파일로 만들어 준다.링커
링커는 목적 파일들과 라이브러리 등을 연결 시켜 하나의 최종 기계어 파일을 만들어 준다.기계어
컴파일러의 동작 과정
해당 부분은 3번의 컴파일러의 동작 과정을 자세히 설명한다.
코드 A=B+C
컴파일 시작 ->
Scanner
어휘 분석을 하는 단계이다.
코드를 Token String으로 만들어A=B+C
를'A','=','B','+','C'
와 같이 나눈다.
순차적으로 진행하여 A를 찾고, 2번째에 연산자를 발견하여
첫번째의 A가 변수임을 알아내는 과정 등을 통해 코드의 문맥을 파악하는 단계이다.
예약어들은 Token으로 판단한다.Parser
이와 같이 잘게 나눈 단어들을 Tree로 만든다.
구문을 분석하는 단계로 Syntax가 오류가 없는지, 어떤 의미인지를 파악한다.Semantic analysis
이 단계는 소스코드가 언어 정의에 의미적으로 부합하는지를 검사한다.
그중 가장 중요한 기능은 타입을 검사하는 것이다.
정수와 문자열의 덧셈, 값을 0으로 나누는 행동 등과 같이 올바르지 않은 코드를 찾아낸다.Intermediate code generator
파싱 트리를 중간 코드로 변환한다.
중복된 값이나 오류 문구가 정제되지 않은 상황이다.Optimizer
오류 문구나 중복된 값을 해결해준다.Code Generator
중간 코드를 어셈블리 언어로 변환한다.Peephole optimizer
어셈블리로 변환된 언어를 한번 더 최적화 해준다.
'개발 관련 학습정리 > 컴파일러 만들기 (이론)' 카테고리의 다른 글
6 - Regular Language (Finite Automata) (0) | 2021.07.12 |
---|---|
5 - Regular Language (Regular Expression) (0) | 2021.07.09 |
4 - Formal Language Grammer (0) | 2021.07.07 |
3 - Formal Language (0) | 2021.07.05 |
1. 컴파일러와 인터프리터 (0) | 2021.06.28 |