우리가 사용하는 언어(코드)를 기계가 알아보는 언어(코드)로 바꾸기, 어떤 과정이 있을까?
우리가 사용하는 언어(코드)를 기계가 알아보는 언어(코드)로 바꾸기
워드프레스로 글을 쓴다는 행위뒤에는 어떤 일이 일어나는 걸까?
컴퓨터의 언어(C, JAVA, 파이선코드) 소스코드가 컴파일러를 거쳐 실행되기까지의 과정을 보자. 아주 단순하지만은 않내!! 소스코드를 작성하면 그로 부터 어휘 분석, 구문 분석, 의미 분석, 코드 최적화, 코드 생성, 링킹의 계층적 구조로 이루어집니다. 파서(Parser)는 컴파일러의 구문 분석 단계에서 소스 코드를 분석하여 추상 구문 트리(Abstract Syntax Tree, AST)를 만드는 역할을 하며, LLVM과 같은 컴파일러 프레임워크는 이러한 각 단계를 추상화된 중간 코드를 통해 효율적으로 처리합니다.
1. 소스 코드 작성
프로그래머가 C, C++, Java 등 고수준 프로그래밍 언어로 소스 코드를 작성합니다.
2. 컴파일(COMPILING)
컴파일러는 소스 코드를 기계가 이해할 수 있는 저수준 언어로 변환하는 역할을 합니다. 이 과정은 여러 단계로 나뉘며, 일반적으로 다음과 같은 순서로 진행됩니다.
* 어휘 분석(Lexical Analysis) (스캐닝):
- 소스 코드를 읽어들여 의미 있는 최소 단위인 '토큰(token)'으로 분리합니다.
- 예를 들어, int x = 10; 이라는 코드는 int, x, =, 10, ;와 같은 토큰으로 쪼개집니다.
* 구문 분석(Syntax Analysis) (파싱):
- 분석된 토큰들을 이용하여 코드의 문법 구조를 확인하고, 소스 코드의 의미적 구조를 계층적으로 표현하는 추상 구문 트리(Abstract Syntax Tree, AST)를 생성합니다.
- 이 단계에서 문법 오류를 검출합니다.
* 의미 분석(Semantic Analysis):
- AST를 기반으로 코드의 의미적인 오류(예: 타입 불일치, 변수 선언 누락 등)를 확인하고 검사합니다.
* 코드 최적화(Code Optimization):
- 생성된 AST를 분석하여 실행 효율을 높이기 위해 불필요한 코드를 제거하거나 더 나은 코드로 변경합니다.
* 코드 생성(Code Generation):
- 최적화된 AST를 바탕으로 최종 목적 코드(예: 어셈블리 코드, 기계어 코드)를 생성합니다.
3. 링킹 (Linking)
컴파일된 여러 소스 파일(목적 파일)과 라이브러리 함수들을 하나로 연결하여 실행 가능한 프로그램을 만듭니다.
4. 실행
링킹이 완료된 실행 파일을 CPU에서 실행합니다.
[LLVM의 역할]
LLVM은 이러한 컴파일러의 단계를 추상화하고 재사용 가능한 구성 요소로 제공하는 프레임워크입니다. LLVM은 소스 코드 분석 및 변환을 위한 여러 단계를 효과적으로 처리하며, 각 단계의 결과물인 중간 코드를 통해 다양한 플랫폼에서 최적화된 코드를 생성할 수 있게 돕습니다.
0 Comments:
댓글 쓰기