컴파일러 처리 과정

컴파일러 처리 과정

소스코드가 CPU에서 실행되기까지의 전체 흐름

전체 흐름

1. 소스코드      : 사람이 작성한 텍스트 코드
2. Lexer         : 코드 → 토큰 (의미 단위로 자름)
3. Parser → AST  : 토큰 → 구조 트리 (문법적 의미)
4. Bytecode / IR : 트리 → 실행 가능한 저수준 명령어
5. Interpreter/JIT: 바이트코드 실행하거나 기계어로 변환
6. Native 실행   : 최적화된 기계어 코드가 CPU에서 실행

1. 소스코드 (Source Code)

let x = 1 + 2;

2. Lexer (어휘 분석기, Tokenizer)

let x = 1 + 2;
// ↓
['let', 'x', '=', '1', '+', '2', ';']

3. Parser → AST (구문 분석기)

let x = 1 + 2;
VariableDeclaration   ← 변수 선언 전체 (let)
└─ VariableDeclarator ← 변수 하나(x)
   ├─ Identifier (x)  ← 변수 이름
   └─ BinaryExpression (+) ← 계산식
      ├─ Literal (1)
      └─ Literal (2)
노드 역할
VariableDeclaration 변수 선언 전체 kind: "let"
VariableDeclarator 변수 하나의 선언과 초기화 -
Identifier 변수 이름 name: "x"
BinaryExpression 계산식 operator: "+"
Literal 숫자 값 value: 1, 2

다른 예시 - var a = new A.init();

VariableDeclaration (kind: "var")
└── VariableDeclarator
    ├── id: Identifier (a)
    └── init: NewExpression
        ├── callee: MemberExpression
        │   ├── object: Identifier (A)
        │   └── property: Identifier (init)
        └── arguments: []

4. Bytecode / IR (중간 표현)

PUSH 1
PUSH 2
ADD
STORE x
구분 설명
바이트코드 인터프리터/가상머신 레벨 명령어. JS 엔진이 AST를 매번 재분석하지 않아도 됨
IR JIT이나 분석용으로 쓰이는 더 일반화된 형태
어셈블리어 CPU 레벨 명령어 (바이트코드와 다름)

5. Interpreter / JIT

Interpreter (인터프리터)

JIT (Just-In-Time 컴파일러)


6. Native 기계어 실행

관련 개념