컴파일러는 다른 프로그램의 소스 코드를 프로그래밍 언어에서 실행 코드로 변환하는 프로그램입니다.
소스 코드는 일반적으로 고급 프로그래밍 언어로되어 있습니다. (예 : Pascal, C, C ++, Java, Perl, C # 등). 실행 가능한 코드는 CPU에 의해 직접 실행될 수있는 일련의 기계 명령 일 수도 있고, 가상 기계 (예 : Java 바이트 코드)에 의해 해석되는 중간 표현 일 수도 있습니다.
요컨대, 컴파일러는 프로그램을 사람이 읽을 수있는 형식에서 기계가 읽을 수있는 형식으로 변환합니다.
컴파일러가 작동하는 방식에 관해서는 정말 복잡합니다. 주제에 대한 책과 대학 과정이 있습니다. 프로세스의 주요 단계를 간략하게 설명하려고하지만 이것은 매우 간단한 개요입니다.
- Lexing-프로그램의 텍스트를 “토큰”으로 나눕니다. 토큰은 식별자 (키워드, 변수 이름, 함수 이름 등) 또는 연산자 (=, *, & 등)와 같은 프로그래밍 언어의 “단어”입니다. .
- 파싱-토큰 시퀀스를 구문 분석 트리로 변환합니다. 파싱 트리는 유형 선언, 변수 선언, 함수 정의, 루프, 조건, 표현식 등 다양한 언어 구성을 나타내는 데이터 구조입니다.
- 최적화-상수 표현식을 평가하고, 사용하지 않는 변수 나 도달 할 수없는 코드를 최적화하고, 가능한 경우 루프를 펼치십시오.
- 파싱 트리를 기계 명령어 (또는 JVM 바이트 코드)로 변환합니다.
다시 한 번 이것은 매우 간단한 설명이라는 점을 강조합니다. 최신 컴파일러는 매우 똑똑하고 결과적으로 매우 복잡합니다.
댓글
컴파일러는 프로그래밍 언어 (원문 언어)로 작성된 소스 코드를 다른 컴퓨터 언어 (원문 언어)로 변환하는 컴퓨터 프로그램 (또는 명령 집합)입니다. 대상 언어 (종종 개체 코드라고하는 이진 형식을 가짐). 소스 코드를 변환하려는 가장 일반적인 이유는 실행 가능한 프로그램을 만드는 것입니다.
컴파일러는 기본 하드웨어와 고급 언어의 소스 프로그램을 연결합니다. 컴파일러에는 다음이 필요합니다.
- 프로그램 구문의 정확성 결정
- 올 바르고 효율적인 개체 코드 생성
- 런타임 구성
- 어셈블러 및 / 또는 링커 규칙에 따라 출력 형식 지정