위키득계정 ↗
기술

컴파일러

컴파일러기술
영문명
Compiler
입력
소스 프로그램
출력
대상 코드 또는 중간 표현
주요 과정
분석, 변환, 코드 생성
컴파일러는 소스 프로그램을 다른 언어나 표현으로 번역하는 소프트웨어다. 기계어 실행 코드를 만들기도 하고, 중간 코드나 다른 고급 언어를 출력하기도 한다.

번역이 필요한 이유

개발자가 쓰는 표현과 처리 장치가 실행할 명령은 서로 다를 수 있다. 컴파일러는 변수와 함수, 제어 흐름으로 쓰인 프로그램을 대상 환경에서 처리할 형태로 바꾼다. 이때 원래 프로그램이 정한 의미를 유지하는 것이 핵심이다.

출력물이 언제나 독립 실행 파일인 것은 아니다. 목적 파일을 만든 뒤 다른 코드와 연결할 수 있고, 가상 머신이 실행할 중간 코드나 다른 언어의 소스 코드를 생성할 수도 있다.

분석에서 코드 생성까지

앞부분에서는 글자열을 토큰으로 나누고 문법 구조를 파악하며 이름과 자료형 등의 규칙을 검사한다. 이후 중간 표현을 거쳐 대상 장치나 실행 환경에 맞는 코드를 만든다.

여러 단계를 나누면 같은 언어를 다른 CPU에 맞게 지원하거나, 여러 언어에서 공통 최적화 기능을 사용하는 데 도움이 된다. 실제 단계의 구성과 경계는 구현에 따라 다르다.

최적화의 조건

불필요한 계산을 줄이거나 반복문과 메모리 접근을 바꾸면 실행 비용을 줄일 수 있다. 그러나 변환이 허용되는지는 언어의 의미 규칙과 컴파일 옵션에 달려 있다. 단순히 짧은 코드로 바꾸는 것이 최적화의 정의는 아니다.

컴파일에 성공했다고 업무 규칙까지 올바르다는 뜻은 아니다. 입력 검증이나 계산식의 논리 오류는 실행 테스트와 별도의 검토가 필요하다.

언제 번역하는가

실행 전에 번역하는 방식과 실행 중에 번역하는 방식이 있다. JIT 컴파일은 실행 중 얻은 정보 등을 활용해 코드를 생성할 수 있다. 인터프리터와 컴파일러를 함께 쓰는 실행 환경도 흔하므로 둘을 모든 경우에 배타적인 방식으로 볼 수는 없다.

관련 문서

프로그래밍 언어 / 인터프리터 / 소프트웨어