Kaleidoscope #0: 목차

eunjo·2022년 9월 4일
0

앞으로 LLVM 공식 홈페이지의 튜토리얼을 따라 Kaleidoscope라는 이름의 프로그래밍 언어를 만들어보려고 해요. C++로 LLVM 기반의 컴파일러를 작성하면서 관련 내용을 공부할 예정입니다. 튜토리얼의 목차를 보니 컴파일러의 프론트엔드(Lexical Analysis, Syntax Analysis, Semantic Analysis)를 다루는 내용같았어요. IR 생성, target machine code 생성, 최적화 등 백엔드 부분은 LLVM 라이브러리를 사용해 구현할 것으로 보였습니다. 목차와 간단한 내용은 다음과 같습니다.


목차

1. Kaleidoscope Introduction and the Lexer

컴파일의 시작이에요. Kaleidoscope가 어떤 기능을 가진 언어인지 알아봅니다. 또한, 소스코드를 파싱하여 Token stream을 생성하는 Lexer를 작성해요.

2. Implementing a Parser and AST

앞서 작성한 Lexer를 가지고 완전한 형태의 파서를 작성해요. 파서는 Recursive Descent Parsing과 Operator-Precedence Parsing 두 가지를 결합한 방식을 사용해 Kaleidoscope 소스코드를 파싱하고, 결과물로 AST(Abstract Syntax Tree)를 저장합니다.

3. Code generation to LLVM IR

AST를 가지고 LLVM IR을 생성합니다.

4. Adding JIT and Optimizer Support

LLVM의 장점 중 하나인 JIT(Just-in-time) 컴파일을 통해 오브젝트 파일을 생성하는 방법을 알아봅니다.

5. Extending the Language: Control Flow

if 조건문과 for 반복문에 따른 제어 흐름을 구현합니다. SSA(Static Single Assignment) form에 대해서도 다룹니다.

6. Extending the Language: User-defined Operators

단항 및 이항 연산자와 연산자 우선순위에 대해 다룹니다.

7. Extending the Language: Mutable Variables

지역 변수를 할당하는 법에 대해 다룹니다.

8. Compiling to Object Files

LLVM IR을 가지고 어떻게 오브젝트 파일을 생성하는지 알아봅니다. 정적 컴파일러처럼 생성한다고 하는데, 정적 링킹을 말하는 건가? 잘 모르겠네요.

9. Debug Information

Kaleidoscope 소스코드를 디버깅할 수 있도록 관련 정보를 추가합니다.

10. Conclusion and other tidbits

Kaleidoscope 튜토리얼을 마치며 앞으로 확장할 수 있는 기능들(가비지 콜렉터, 예외처리, 디버깅, 스파게티 스택? 등)에 대해 다룹니다.

profile
바이너리 분석이 좋아요

0개의 댓글