5. 운영체제 - 컴파일러
Compile 은 소스코드를 CPU 가 이해할 수 있는 기계어로 변환하는 작업이다. 여기서 소스코드는 C, C++, JAVA 등으로 작성된 파일이며, 이러한 소스코드 파일을 목적코드 파일로 변환하는 것이다. 코드를 작성하고 프로그램이 실행되는 과정은 아래와 같다.
✅ 코드 작성 ( 컴파일 ) 오브젝트 파일 ( 링킹 ) 실행 파일 ( 로드 ) 메모리 적재 후 수행
Compile
컴파일러는 Tokenizer , Lexer , Parser 를 거쳐서 구문분석 과정을 실행한다. 이 구문분석 과정이 완료되면 그 결과를 바탕으로 AST 가 생성된다.
🌲AST 란?
Abstract Syntax Tree 의 약자. abstract 하게 작성된 parsing tree 로, 작성한 소스코드를 컴퓨터가 이해할 수 있도록 구조화한 것이다. 불필요한 단어는 제외하고 꼭 필요한 데이터만 나타내기 때문에 Abstract 이라고 표현한다. (공백, 기호, 세미콜론 등은 표현하지 않는다.)
1. Tokenizer
어떤 의미를 가지는 요소들을 토큰으로 쪼개는 단계이다. 기준이 정해진 것은 아니며, 단어나 단어구 등의 의미있는 단위로 쪼개는 것이 일반적이다.
2. Lexer
Tokenizer 에서 쪼갠 의미를 분석하는 단계로, 의미있는 조각을 검출하여 토큰을 생성하는 단계이다. Tokenizer 단계와 함께 Lexcial analyze 단계를 이루고 있다.
3. Parser
토큰화된 데이터를 가지고 구조적으로 나타내는 단계로, 데이터 검증까지 함께하여 Syntax Analyze 단계를 이룬다. 여기서 도출된 결과가 AST 로 생성되며 결과적으로 기계어로 변환되기 직전까지의 과정을 담당한다고 이해하면 된다.
Linking
컴파일러는 기계어로 이루어진 파일인 object 파일을 생성하는데, 이는 소스코드와 실행파일의 중간단계이다. 이러한 Object 파일들과 라이브러리 파일을 합쳐서, 이를 링커가 링킹하여 실행파일로 만든다. 즉 위의 컴파일 과정과 링킹 과정을 거치면 사용자가 실행 가능한 실행파일이 생성된다.
Load
위의 단계를 거쳐 실행된 파일을 Loader 는 메모리에 적재하고, 실행이 가능하게 된다.
코드가 실제 작성되고 실행되는 과정을 컴파일러 구문분석 과정을 중심으로 작성해보았다. 한 번 쯤은 자세히 공부해 보고 알아볼만한 의미가 있는 주제였다.