코드 생성
코드 생성 (Code Generation)
중간 코드 생성, 제어 흐름, 문법 규칙
중간 코드 (Intermediate Code)
AST를 실행 가능한 저수준 명령어로 변환하는 단계
제어 흐름 명령어
if 문 변환 예시:
조건검사
gofalse label1 ← 조건이 false면 label1으로 점프
stmt1
goto label2 ← label2로 무조건 점프
label1:
stmt2
label2:
| 명령어 | 설명 |
|---|---|
gofalse label |
조건이 false일 때 해당 레이블로 점프 |
goto label |
무조건 해당 레이블로 점프 |
label: |
점프 목적지 표시 |
문법 규칙 (Grammar Rules)
Yacc/Bison 기반 문법 규칙 예시:
RETURN expr STMTEND { /* 반환문 처리 */ }
DEF ID '(' ')' stmt {
dwgen($2);
$2->token = ID2;
$ = MakeOPTree(DEF, $2, $4);
}
$$: 현재 규칙의 결과값$2,$4: 규칙의 두 번째, 네 번째 심볼MakeOPTree(): 연산 트리 노드 생성
배열 문법 예시
LID '[' ']' ASSGN element_list STMTEND
- 배열 선언 및 초기화를 처리하는 문법 규칙
관련 개념
- 컴파일러 처리 과정 - 전체 파이프라인에서 코드 생성 위치
- 최적화 - 생성된 코드 최적화