Books/컴파일러 만들기 ✔️

[컴파일러 만들기] 1장 - 시작하며

Aaron-Kim 2021. 12. 20. 16:40

1.0 시작하며

  - 프로그래밍을 잘하기 위해서는?

    - 어떤 것이든 만들어보기!

  - 무엇을 만들어야 하는가?

    - 게임 (좋은 선택지)

      - 자료구조, 알고리즘, 그래픽, 사운드, 네트워크, 멀티 스레드, 객체지향, 수학 등...

    - 컴파일러 (권장)

      - 리스트, 트리, 스택, 재귀, 컴파일 타임, 런 타임, 함수 호출 규약, 프로그래밍 언어 등...

      - 컴퓨터와 프로그램이 동작하는 원리와 구조를 배울 수 있음

1.1 프로그래밍 언어

  - 나만의 프로그래밍 언어 디자인, 실행하는 인터프리터, 컴파일러, 가상머신 제작 가능

1.2 컴파일러

  - 컴파일러: 코드를 입력받아 코드를 출력하는 프로그램 (컴파일러 입장)

    - 입력 받은 코드 => 소스 코드 (프로그래밍 언어로 작성한 문자열 형태의 코드)

    - 출력 하는 코드 => 목적 코드 (바이너리 형태의 코드, 바이트 코드)

    - 소스 코드를 목적 코드로 번역하는 프로그램

    - 컴파일러: 소스 코드를 번역하는 프로그램

      - 컴파일; 소스 코드 -> 어휘 분석 -> 구문 분석 -> 코드 생성 -> 목적 코드

    - 인터프리터: 소스 코드를 실행하는 프로그램

      - 인터프리터; 소스 코드 -> 어휘 분석 -> 구문 분석 -> 인터프리터 -> 실행 결과

  - 컴파일러가 출력하는 목적 코드를 실행하기 위해 가상 머신 필요 ex) JVM

1.3 예제 컴파일러

  - Visual Studio Community 설치 및 설정

  - github 예제 소스 코드

 

// Main.cpp (전체적인 틀)

auto main() -> void {
  string sourceCode = R""""(
    function main() {
      print 'Hello, World!';
    }
  )"""";
  auto tokenList = scan(sourceCode); // 어휘 분석
  auto syntaxTree = parse(tokenList); // 구문 분석
  // interpret(syntaxTree); // 인터프리터
  auto objectCode = generate(syntaxTree); // 컴파일러
  execute(objectCode); // 가상머신
}

1.4 마치며

  - 전체 맥락을 파악하는 것이 제일 중요


[Source Code] 예제 컴파일러 (Main.cpp)

반응형