컴파일러에서의 위상과 패스의 차이

Anonim

단계 대 패스 컴파일러

일반적으로 컴파일러는 소스 언어라고하는 한 언어로 작성된 프로그램을 읽습니다. 소스 언어라고하는 한 언어로 작성된 프로그램을 대상 언어라고하는 다른 언어로 번역합니다. 전통적으로 소스 언어는 C ++와 같은 고급 언어 였고 대상 언어는 어셈블리 언어와 같은 저급 언어였습니다. 그래서, 일반적으로 컴파일러는 한 언어에서 다른 언어로 번역하는 번역자로 볼 수 있습니다. 합격과 단계는 컴파일러에서 자주 사용되는 두 가지 용어입니다. 컴파일러의 패스 수는 소스 (또는 어떤 표현 형식)를 거치는 횟수입니다. 컴파일러는 구성의 편의를 위해 부분으로 나누어집니다. 위상은 종종 컴파일러의 독립적 인 단일 부분을 호출하는 데 사용됩니다.

컴파일러에서 패스 란 무엇입니까?

컴파일러를 분류하는 표준 방법은 "통과 (pass)"횟수입니다. 일반적으로 컴파일은 상대적으로 자원 집약적 인 프로세스이며 처음에는 컴퓨터가 완전한 작업을 수행 한 프로그램을 보유 할만큼 충분한 메모리가 없었습니다. 초기 컴퓨터의 하드웨어 리소스의 이러한 제한으로 인해 컴파일러는 소스 코드 (소스 코드 또는 다른 형식의 "통과")를 거쳐 부분 작업을 수행 한 더 작은 하위 프로그램으로 분해되었으며 분석을 수행했습니다, 변환 및 번역 작업을 별도로 수행 할 수 있습니다. 따라서이 분류에 따라 컴파일러는 원 패스 또는 다중 패스 컴파일러로 식별됩니다.

이름에서 알 수 있듯이 원 패스 컴파일러는 단일 패스로 컴파일됩니다. 원 패스 컴파일러를 작성하는 것이 더 쉽고 멀티 패스 컴파일러보다 빠르게 수행합니다. 따라서 리소스가 제한 될 때조차도 언어는 단일 패스 (예: 파스칼)로 컴파일 될 수 있도록 설계되었습니다. 반면에, 일반적인 다중 패스 컴파일러는 몇 가지 주요 단계로 구성됩니다. 첫 번째 단계는 스캐너 (어휘 분석기라고도 함)입니다. 스캐너는 프로그램을 읽고이를 토큰 문자열로 변환합니다. 두 번째 단계는 파서입니다. 토큰 문자열을 구문 분석 트리 (또는 구문 트리)로 변환하여 구문 구조를 캡처합니다. 다음 단계는 구문 구조의 의미를 해석하는 단계입니다. 코드 최적화 단계와 최종 코드 생성 단계는 다음과 같습니다.

컴파일러의 단계 란 무엇입니까?

컴파일러 생성에 대해 이야기 할 때 종종 단계라는 용어가 나옵니다. 초기에 컴파일러는 단순한 언어를 컴파일하기 위해 한 사람이 작성한 단일의 모 놀리 식 소프트웨어의 모든 단순한 조각이었습니다. 그러나 번역 할 언어의 소스 코드가 복잡해지고 커질수록 컴파일러는 여러 단계 (상대적으로 독립적 인)로 나뉘어져 있습니다.서로 다른 단계를 갖는 이점은 컴파일러 개발을 개발자 팀에 분산시킬 수 있다는 것입니다. 또한, 단계를 개선 된 단계 또는 추가 단계 (예: 추가 최적화)로 대체하여 모듈화 및 재사용을 향상시켜 컴파일러에 추가합니다. 컴파일을 단계별로 나누는 프로세스는 Carnegie Melon University의 PQCC (Production Quality Compiler-Compiler Project)에서 소개되었습니다. 그들은 프론트 엔드, 중간 엔드 및 백 엔드라는 용어를 도입했습니다. 대부분의 컴파일러에는 적어도 두 단계가 있습니다. 그러나 일반적으로 백 엔드와 프런트 엔드는 이러한 단계를 캡슐화합니다.

컴파일러에서 Phase와 Pass의 차이점은 무엇입니까?

단계와 패스는 컴파일러 영역에서 사용되는 두 가지 용어입니다. 패스는 컴파일러가 소스 코드 나 다른 표현을 한 번 통과 (통과)합니다. 일반적으로 대부분의 컴파일러는 프론트 엔드와 백엔드라고하는 2 단계 이상을 가지고 있지만 1 패스 또는 다중 패스가 될 수 있습니다. 단계는 구조에 따라 컴파일러를 분류하는 데 사용되고 패스는 컴파일러를 작동 방식에 따라 분류하는 데 사용됩니다.