>  기사  >  컴파일 프로세스는 여러 단계로 나눌 수 있습니다

컴파일 프로세스는 여러 단계로 나눌 수 있습니다

青灯夜游
青灯夜游원래의
2021-07-02 14:45:1427840검색

컴파일 프로세스는 5단계로 나눌 수 있습니다. 1. 어휘 분석 단계 이 단계에서는 소스 프로그램을 구성하는 문자열을 스캔하고 분해하여 각 단어를 식별합니다. 2. 구문 분석 단계는 문장의 문법 구조를 분석하는 데 사용됩니다. 3. 의미 분석 및 중간 코드 생성 단계. 4. 코드 최적화 단계. 5. 타겟 코드 생성 프로그램 단계.

컴파일 프로세스는 여러 단계로 나눌 수 있습니다

이 튜토리얼의 운영 환경: Windows 10 시스템, Dell G3 컴퓨터.

소스 프로그램을 대상 프로그램으로 변환하는 컴파일러의 작업 프로세스는 어휘 분석, 중간 코드 생성 및 대상 코드 생성의 5단계로 나뉩니다.

컴파일 프로그램은 일반적으로 어휘 분석, 구문 분석, 의미 분석 및 중간 코드 생성, 코드 최적화 및 대상 코드 생성 프로그램의 5단계로 구분됩니다.

컴파일 프로세스는 여러 단계로 나눌 수 있습니다

다음은 5단계에 대한 자세한 설명입니다. of thecompile process

프로그램을 컴파일하는 작업은 소스 프로그램을 입력하고 타겟 프로그램을 출력하는 과정이 매우 복잡합니다. 그러나 그 과정에 있어서는 사람이 자연어를 직접 번역하는 것과 많은 유사점이 있다. 영어 단락을 중국어로 번역하는 것과 같이 하나의 텍스트를 다른 텍스트로 번역할 때 일반적으로 다음 단계를 거쳐야 합니다.

(1) 먼저 문장의 각 단어를 식별합니다.

( 2) 문장의 문법 구조

(3) 문장의 의미를 바탕으로 예비 번역을 합니다.

(4) 번역을 수정합니다.

(5) 최종 번역을 작성합니다.

마찬가지로 컴파일러의 작업 프로세스를 어휘 분석, 구문 분석, 의미 분석 및 중간 코드 생성, 최적화 및 대상 코드 생성의 다섯 단계로 나눌 수 있습니다.

첫 번째 단계: 어휘 분석

어휘 분석의 작업은 소스 프로그램을 입력하고, 소스 프로그램을 구성하는 문자열을 스캔 및 분해하고, 각 단어(단어 기호 또는 줄여서 기호라고도 함)를 식별하는 것입니다. ), 기본 단어(시작, 끝, if, for, while), 식별자, 상수, 연산자 및 구분 기호(구두점, 왼쪽 및 오른쪽 대괄호) 등이 있습니다.

단어 기호는 언어의 기본 구성 요소이자 사람들이 프로그램을 이해하고 작성하는 기본 요소입니다. 이러한 요소를 식별하고 이해하는 것은 의심할 여지없이 번역의 기초입니다. 영어에서 중국어로 번역하는 것과 마찬가지로, 영어 단어를 이해하지 못하면 정확한 번역이 불가능합니다. 어휘 분석 단계에서 이어지는 것은 언어의 어휘 규칙(또는 단어 형성 규칙)입니다. 어휘 규칙을 기술하는 효과적인 도구는 형식적 형식과 효율적인 오토마타입니다.

두 번째 단계: 문법 분석

문법 분석 작업: 어휘 분석을 기반으로 하고 언어의 문법 규칙에 따라 단어 기호 문자열을 "구"와 같은 다양한 문법 단위(문법 범주)로 분해합니다. , "문장", "프로그램 세그먼트" 및 "프로그램" 등. 구문 분석을 통해 전체 입력 문자열이 문법적으로 올바른 "프로그램"을 구성하는지 여부가 결정됩니다. 문법 분석은 언어의 문법 규칙을 따릅니다. 문법 규칙은 일반적으로 문맥 자유 문법을 사용하여 설명됩니다. 어휘 분석은 선형 분석이고 구문 분석은 계층 분석입니다. 예: Z= 따라서 구문 분석의 임무는 X + 0.618 * Y를 산술식으로 식별하는 동시에 위의 전체 기호 열의 10배가 대입문의 범주에 속한다는 것입니다.

세 번째 단계: 의미 분석 및 중간 코드 생성

이 단계의 작업은 구문 분석을 통해 식별된 다양한 문법 범주의 의미를 분석하고 예비 번역(중간 코드 생성)을 수행하는 것입니다. 이 단계에는 일반적으로 작업의 두 가지 측면이 포함됩니다. 먼저, 변수 정의 여부, 유형이 올바른지 등 각 문법 범주에 대한 의미 배열을 수행합니다. 의미 체계가 정확하면 작업의 다른 측면, 즉 중간 코드의 해석이 수행됩니다.

이 단계는 언어의 의미론적 규칙을 따릅니다. 의미 체계 규칙은 일반적으로 속성 문법을 사용하여 설명됩니다. "번역"은 여기서부터 시작됩니다. 소위 "중간 코드"는 의미가 명확하고 처리하기 쉬운 표기 시스템으로, 일반적으로 특정 하드웨어에 독립적입니다. 이 표기법은 현대 컴퓨터의 명령어 형식과 어느 정도 유사하거나 비교적 쉽게 현대 컴퓨터의 기계어 명령어로 변환할 수 있습니다.

예를 들어, 많은 컴파일러는 "3주소 명령어"와 매우 유사한 "쿼터니언"을 중간 코드로 사용합니다. 그 의미는 "왼쪽 및 오른쪽 피연산자"("연산자"로 지정됨)에 대해 특정 연산을 수행하고 해당 연산으로 얻은 값을 "결과"로 유지한다는 것입니다. 테트라그램이 중간 코드로 사용될 때 중간 코드를 생성하는 작업은 언어의 문법 규칙에 따라 다양한 범주를 테트라그램 시퀀스로 번역하는 것입니다.

일반적으로 중간 코드는 특정 하드웨어에 독립적인 표기 시스템입니다. 일반적으로 사용되는 중이모에는 4차 수식 외에도 3차 수식, 간접 3차 수식, 역폴란드 표기법, 트리 표현 등이 포함됩니다.

네 번째 단계: 코드 최적화

최적화 작업은 최종 단계에서 보다 효율적인(시간 및 공간 절약) 대상 코드를 생성하기 위해 이전 단계에서 생성된 중간 코드를 처리하고 변환하는 것입니다. 최적화의 주요 측면에는 PR 하위 표현식 추출, 루프 최적화, 쓸모 없는 코드 삭제 등이 포함됩니다. 때로는 "병렬 작업"을 용이하게 하기 위해 코드를 병렬화할 수도 있습니다. 최적화가 따르는 원리는 프로그램의 등가 변환 규칙입니다.

다섯 번째 단계: 대상 코드 생성 프로그램

이 단계의 작업은 중간 코드(또는 최적화 후)를 특정 기계에서 하위 수준 언어 코드로 변환하는 것입니다. 이 단계에서는 최종 번역을 구현하며 그 작업은 하드웨어 시스템 구조와 기계 명령어 의미에 따라 달라집니다. 이 단계의 작업은 하드웨어 시스템 기능 구성 요소 사용 설계, 기계 명령어 선택, 다양한 데이터 유형 변수에 대한 저장 공간 할당, 레지스터 및 백업 레지스터 예약 등을 포함하여 매우 복잡합니다.

목적 코드는 절대 명령어 코드, 재배치 가능 명령어 코드, 조립 명령어 코드의 형태일 수 있습니다. 개체 코드가 절대 명령 코드인 경우 해당 개체 코드를 즉시 실행할 수 있습니다. 대상 코드가 어셈블리 명령 코드인 경우 실행하기 전에 어셈블러에서 컴파일해야 합니다. 오늘날 대부분의 실제 컴파일러에 의해 생성된 객체 코드는 재배치 가능한 명령 코드라는 점을 지적해야 합니다. 이러한 종류의 대상 코드는 실행하기 전에 연결 어셈블리 프로그램을 사용하여 각 대상 모듈(시스템에서 제공하는 라이브러리 기능 포함)을 함께 연결하고 메인 메모리에서 프로그램 변수(또는 상수)의 위치를 ​​결정하고 로드해야 합니다. 지정된 메모리를 메모리에 넣습니다. 시작 주소는 실행할 수 있는 절대 명령어 코드 프로그램을 만듭니다.

더 많은 프로그래밍 관련 지식을 보려면 프로그래밍 비디오를 방문하세요! !

위 내용은 컴파일 프로세스는 여러 단계로 나눌 수 있습니다의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.