Qaupot Blog
Software Engineering, Trip

301. Compile 과정

🕐 Tue, 04 Feb 2014 09:00:00 GMT 🕓 Fri, 20 Aug 2021 11:03:00 GMT

컴파일 과정

C/C++ 컴파일러는 여러분이 작성한 코드를 기계어로 바꿉니다.

  • 여기서는 lexical analyzer, pre processor 등의 일련의 프로그램들을 모두 묶어 편의상 컴파일러로 통칭합니다.

이 과정을 정의하는 방법은 다를 수 있지만, 여기서는 7단계로 나눠 보겠습니다.

컴파일 과정 - 1. 어휘 분석(Lexical analysis)

키워드, 식별자(함수 혹은 변수의 이름)등을 토큰이라는 형태로 만들어 잘라냅니다.
사람들의 언어에 비유해 보면 하나의 긴 글을 각 품사를 이루는 어휘들로 잘라내는 일입니다.

Var = A + 1; 이라는 식이 있다면 Var, =, A, +, 1, ; 로 각각 분리됩니다.

  • Var 와 A는 Identifier 라는 품사를, =과 +는 Operator 라는 품사를,
  • 1은 Constant 라는 품사, ;는 Punctuator 라는 품사에 해당하는 어휘들이 됩니다.

이 단계는 매우 복잡하고 공부할 분량이 많으므로, 더욱 상세히 알아보고자 하신다면 다른 문서를 추가로 참고해 주세요.

컴파일 과정 - 2. 전 처리(Preprocessing)

전처리 구문은 전체적인 코드의 변환에 앞서 선행되어 처리해야 할 일들을 기술합니다.
이는 매크로나 컴파일러 지시자 혹은 조건부 컴파일등을 의미합니다.

컴파일 과정 - 3. 구문 분석(Syntax analysis)

각각의 토큰들을 언어의 문법체계에 맞춰 분석합니다.
보통의 경우 아래와 같은 트리 형태를 생성하게 됩니다.

컴파일 과정 - 4. 의미 분석(Semantic analysis)

분석된 구문에 대해 의미를 부여합니다.
이 과정에서 심볼 테이블이라는 것을 생성하며, 변수나 함수 등의 정보를 파악합니다.

컴파일 과정 - 5. 분석 (Analysis)

프로그램의 흐름을 파악합니다.

컴파일 과정 - 6. 최적화(Optimization)

분석 단계에서 수집한 정보를 바탕으로 프로그램을 최적화 합니다.

컴파일 과정 - 7. 코드 생성(Code generation)

어떤 한 언어에서 다른 언어로 그 결과를 만들어 냅니다.
C/C++ 언어의 경우 컴파일 결과로 기계어를 얻게 됩니다.

이러한 작업을 위해서는 컴파일러 마다 다르지만, 보통 2단계로 나누어 처리하며,
이 경우 1에서 4까지의 과정을 front-end 라 하며, 5에서 7과정을 back-end 라고 합니다.

이 블로그는 개인 블로그입니다. 게시글은 오류를 포함하고 있을 수 있지만, 저자는 오류를 해결하기 위해 노력하고 있습니다.
게시글에 별도의 고지가 없는 경우, 크리에이티브 커먼즈 저작자표시-비영리-변경금지 4.0 라이선스를 따릅니다.

This blog is personal blog. published posts may contain some errors, but author doing efforts to clear errors.
If post have not notice of license, it under creative commons Attribution-NonCommercial-NoDerivatives 4.0.