토픽 105 / 111·코드 실행 체계 (Code Execution Model)
컴파일러 (Compiler)
컴파일러 (Compiler)
고급 프로그래밍 언어로 작성된 소스 코드를 기계어 또는 중간 코드로 번역하는 언어 처리 시스템으로, 실행 전에 전체 코드를 변환하여 독립 실행 파일을 생성
목적: 소스 코드를 실행 가능한 형태로 변환, 코드 최적화, 오류 검출, 타겟 플랫폼 적응
특징: 전체 번역(Batch), 실행 전 완료, 최적화 가능, 실행 속도 빠름, 컴파일 시간 필요
컴파일 과정
- •① 어휘 분석(Lexical Analysis): 소스코드→토큰(Token) 분리, 스캐너/렉서, 정규표현식
- •② 구문 분석(Syntax Analysis): 토큰→파스 트리(Parse Tree), 파서, 문맥자유문법(CFG), LL/LR 파서
- •③ 의미 분석(Semantic Analysis): 타입 검사, 스코프 검증, 심볼 테이블, AST 생성
- •④ 중간 코드 생성(IR Generation): 3주소 코드, SSA 형태, LLVM IR
- •⑤ 코드 최적화(Optimization): 상수 전파, 루프 불변식 이동, 인라이닝, 데드코드 제거
- •⑥ 목적 코드 생성(Code Generation): 레지스터 할당, 명령어 선택, 기계어 생성
주요 컴파일러: GCC(C/C++/Fortran, GNU), Clang/LLVM(모듈형/확장성), javac(Java→바이트코드), rustc(Rust/소유권 검증)
장점: 빠른 실행 속도, 코드 최적화, 사전 오류 검출, 지적재산 보호(바이너리 배포)
단점: 컴파일 시간 필요, 플랫폼 종속적, 디버깅 어려움, 개발 반복 느림
비교: 컴파일러(전체번역/빠른실행/사전오류/C·C++·Rust) vs 인터프리터(줄단위/느린실행/유연/Python·Ruby)
연관: 인터프리터, 링커, 로더, LLVM, AST, 최적화