컴파일러 디자인이란 무엇입니까? 유형, 건설 도구, 예
컴파일러란 무엇입니까?
컴파일러는 고급 언어로 작성된 소스 코드를 저급 기계어로 변환하는 데 도움을 주는 컴퓨터 프로그램입니다. 코드의 의미를 변경하지 않고 한 프로그래밍 언어로 작성된 코드를 다른 언어로 변환합니다. 또한 컴파일러는 실행 시간과 메모리 공간에 최적화된 최종 코드를 효율적으로 만듭니다.
컴파일 프로세스에는 기본 번역 메커니즘과 오류 감지가 포함됩니다. 컴파일러 프로세스는 프런트 엔드에서 어휘, 구문 및 의미 분석을 거치고 백엔드에서 코드 생성 및 최적화를 거칩니다.
컴파일러의 특징
- 단정
- 컴파일 속도
- 코드의 올바른 의미를 유지하십시오.
- 대상 코드의 속도
- 합법적이고 불법적인 프로그램 구성을 인식합니다.
- 우수한 오류 보고/처리
- 코드 디버깅 도움말
컴파일러의 종류
컴파일러의 유형은 다음과 같습니다.
- 단일 패스 컴파일러
- XNUMX단계 컴파일러
- 멀티패스 컴파일러
단일 패스 컴파일러
단일 패스에서는 컴파일러 소스 코드가 기계어 코드로 직접 변환됩니다. 예를 들어 파스칼 언어입니다.
XNUMX단계 컴파일러
2 패스 컴파일러는 두 섹션으로 나뉩니다.
- 프런트 엔드: 이는 법률 코드를 중간 표현(IR)에 매핑합니다.
- 백엔드: IR을 대상 시스템에 매핑합니다.
XNUMX단계 컴파일러 방법은 또한 대상 변경 프로세스를 단순화합니다. 또한 여러 프런트 엔드도 허용됩니다.
멀티패스 컴파일러
멀티패스 컴파일러는 프로그램의 소스 코드나 구문 트리를 여러 번 처리합니다. 큰 프로그램을 여러 개의 작은 프로그램으로 나누어 처리합니다. 여러 개의 중간 코드를 개발합니다. 이러한 멀티패스는 모두 이전 단계의 출력을 입력으로 사용합니다. 따라서 메모리가 덜 필요합니다. '와이드 컴파일러'라고도 합니다.
컴파일러의 임무
컴파일러가 수행하는 주요 작업은 다음과 같습니다.
- 소스 프로그램을 조각으로 나누고 문법 구조를 적용합니다.
- 중간 표현에서 원하는 대상 프로그램을 구성하고 기호 테이블을 생성할 수도 있습니다.
- 소스 코드를 컴파일하고 오류를 감지합니다.
- 모든 변수 및 코드의 저장을 관리합니다.
- 별도의 컴파일 지원
- 전체 프로그램을 읽고 분석하고 의미적으로 동등한 것으로 번역합니다.
- 기계 종류에 따라 소스 코드를 목적 코드로 변환
컴파일러의 역사
컴파일러 역사의 중요한 랜드마크는 다음과 같습니다.
- "컴파일러"라는 단어는 1950년대 초 Grace Murray Hopper에 의해 처음 사용되었습니다.
- 최초의 컴파일러는 1954년에서 1957년 사이에 John Backum과 그의 그룹에 의해 구축되었습니다. IBM.
- 코볼은 최초의 프로그래밍 언어 1960년에 여러 플랫폼에서 컴파일되었습니다.
- 스캐닝 및 파싱 문제에 대한 연구는 완전한 솔루션을 제공하기 위해 1960년대와 1970년대에 추진되었습니다.
언어 처리 시스템의 단계
컴파일러의 개념을 알아보기 전에 먼저 컴파일러와 함께 작동하는 몇 가지 다른 도구에 대해 이해해야 합니다.
- 전 처리기: 전처리기는 컴파일러의 일부로 간주됩니다. 컴파일러에 대한 입력을 생성하는 도구입니다. 매크로 처리, 기능 보강, 언어 확장 등을 다룹니다.
- 통역사: 인터프리터는 고급 언어를 저급 기계어로 번역하는 컴파일러와 같습니다. 둘 사이의 주요 차이점은 인터프리터가 코드를 한 줄씩 읽고 변환한다는 것입니다. 컴파일러는 코드 전체를 한번에 읽어서 기계어를 만들어냅니다.
- 어셈블러: 어셈블리 언어 코드를 기계가 이해할 수 있는 언어로 번역합니다. 어셈블러의 출력 결과는 기계 명령어와 이러한 명령어를 메모리에 저장하는 데 필요한 데이터의 조합인 객체 파일이라고 합니다.
- 링크: 링커는 다양한 객체 파일을 연결하고 병합하여 실행 파일을 생성할 수 있도록 도와줍니다. 이러한 파일은 모두 별도의 어셈블러로 컴파일되었을 수 있습니다. 링커의 주요 임무는 프로그램에서 호출된 모듈을 검색하고 모든 모듈이 저장된 메모리 위치를 찾는 것입니다.
- 짐을 싣는 사람: 로더는 실행 파일을 메모리에 로드하고 실행하는 작업을 수행하는 OS의 일부입니다. 또한 추가 메모리 공간을 생성하는 프로그램의 크기를 계산합니다.
- 크로스 컴파일러: 컴파일러 디자인의 크로스 컴파일러는 실행 가능한 코드를 생성하는 데 도움이 되는 플랫폼입니다.
- 소스-소스 컴파일러: 소스 투 소스 컴파일러는 한 프로그래밍 언어의 소스 코드를 다른 언어의 소스로 번역할 때 사용되는 용어입니다.
컴파일러 구성 도구
컴파일러 구축 도구는 전 세계에 퍼진 컴퓨터 관련 기술로 소개되었습니다. 컴파일러- 컴파일러, 컴파일러- 생성기 또는 변환기라고도 합니다.
이러한 도구는 컴파일러의 구성 요소를 지정하고 구현하기 위해 특정 언어나 알고리즘을 사용합니다. 다음은 컴파일러 구성 도구의 예입니다.
- 스캐너 발전기: 이 도구는 정규식을 입력으로 사용합니다. 예를 들어 Unix용 LEX Opera팅 시스템.
- 구문 지향 번역 엔진: 이것들 소프트웨어 도구 구문 분석 트리를 사용하여 중간 코드를 제공합니다. 하나 이상의 번역을 구문 분석 트리의 각 노드와 연결하는 목표가 있습니다.
- 파서 생성기: 파서 생성기는 문법을 입력으로 받아서 문법의 도움을 받아 문자 스트림을 파싱할 수 있는 소스 코드를 자동으로 생성합니다.
- 자동 코드 생성기: 중간 코드를 가져와 기계어로 변환합니다.
- 데이터 흐름 엔진: 이 도구는 코드 최적화에 도움이 됩니다. 여기서는 사용자가 정보를 제공하고 중간 코드를 비교하여 관계를 분석합니다. 데이터 흐름 분석이라고도 합니다. 프로그램의 한 부분에서 다른 부분으로 값이 어떻게 전송되는지 알아내는 데 도움이 됩니다.
컴파일러를 사용하는 이유는 무엇입니까?
- 컴파일러는 전체 프로그램을 확인하므로 구문이나 의미 오류가 없습니다.
- 실행 파일은 컴파일러에 의해 최적화되므로 더 빠르게 실행됩니다.
- 메모리에 내부 구조를 생성할 수 있습니다.
- 프로그램이 만들어진 동일한 컴퓨터에서 프로그램을 실행할 필요가 없습니다.
- 전체 프로그램을 다른 언어로 번역하십시오.
- 디스크에 파일을 생성합니다.
- 파일을 실행 가능한 형식으로 연결합니다.
- 구문 오류와 데이터 유형을 확인하세요.
- 언어 의미론에 대한 이해를 높이는 데 도움이 됩니다.
- 언어 성능 문제를 처리하는 데 도움이 됩니다.
- 사소한 프로그래밍 프로젝트에 참여할 수 있는 기회.
- 컴파일러를 구성하는 데 사용되는 기술은 다른 목적에도 유용할 수 있습니다.
컴파일러의 응용
- 컴파일러 설계는 고급 프로그래밍 언어의 완전한 구현을 돕습니다.
- 컴퓨터 최적화 지원 Archi강의 병렬성.
- 기계의 새로운 메모리 계층 설계.
- 프로그램 번역에 널리 사용됩니다.
- 다른 소프트웨어 생산 도구와 함께 사용됩니다.
제품 개요
- 컴파일러는 고급 언어로 작성된 소스 코드를 저급 기계어로 변환하는 데 도움을 주는 컴퓨터 프로그램입니다.
- 정확성, 컴파일 속도, 코드의 의미를 올바르게 유지하는 것은 컴파일러 설계의 중요한 특징입니다.
- 컴파일러는 1) 단일 패스 컴파일러, 2) 3개의 패스 컴파일러, XNUMX) 멀티패스 컴파일러의 세 부분으로 나뉩니다.
- "컴파일러"는 Grace Murray Hopper가 1950년대 초에 처음 사용한 단어였습니다.
- 언어 처리 시스템의 단계는 전처리기, 인터프리터, 어셈블러, 링커/로더입니다.
- 중요한 컴파일러 구축 도구는 1) 스캐너 생성기, 2) 구문-3) 지정 번역 엔진, 4) 파서 생성기, 5) 자동 코드 생성기입니다.
- 컴파일러의 주요 임무는 전체 프로그램을 확인하는 것이므로 구문이나 의미 오류가 없습니다.