Compiler,  Study

[Compiler] Compiler Pipeline 구성

Computer system에서 compiler란 high level languages (C, C++, Python 등)을 hardware에서 이해 할 수 있는 형태로 전환하는 프로그램이다. Compiler와 비슷한 interpreter 또한 존재하는데, 간단한 차이는 다음과 같다.

CompilerInterpreter
Compiler는 전체 program을 분석한다.Interpreter는 한 번에 one statement를 변환한다.
Execution time이 interpreter에 비해 빠르다.Execution time이 compiler에 비해 느리다.
Source code를 object file로 변환한다.Compile process가 따로 필요하지 않고 line by line으로 해석한다.
Execution을 위해 source code가 필요하지 않는다.Execution을 위해선 source code가 필요하다.
Languages: C, C++, C#Languages: Python, Perl, MATLAB

구조는 크게 front-end, middle-end, back-end로 나뉜다.

1. Front-end

Compiler에 따라서 세부 process는 다르겠지만, Low Level Virtual Machine (LLVM) 기준으로는 위와 같이 설명 될 수 있다. 참고로 GCC compiler는 다음 link에서 참고 바란다. 링크

1.1 Lexical analyzer

Compile 단계 중 첫 번째인 lexical analyzer 단계에선 compile input program을 token sequence로 변환한다.

1.2 Syntax analyzer

이 단계에선 lexical analyzer에서 만든 token sequence를 바탕으로 syntax가 맞는지를 확인한다. 이 때 Abstract Syntax Tree (AST) struct가 만들어진다.

1.3 Semantic analyzer

만들어진 AST를 바탕으로 program 내에서 type check, flow control check, label check을 진행한다.

1.4 Intermediate code generator

최종적으로 middle-end로 전달하기 위한 intermediate code를 AST 기반으로 생성한다.

2. Middle-end

보통 middle-end에선 optimization을 주로 진행한다.

3. Back-end

Back-end에선 input으로 들어온 intermediate code를 바탕으로 target hardware에 dependent한 assembly code를 생성하는 과정을 거친다.

Reference

  1. https://home.adelphi.edu/~siegfried/cs372/372l8.pdf

Leave a Reply

Your email address will not be published. Required fields are marked *