컴파일러 예제

컴파일러 분석 및 최적화의 범위는 매우 다양합니다. 범위는 기본 블록 내에서 작동에서 전체 절차 또는 전체 프로그램까지 다양합니다. 최적화의 세분성과 컴파일 비용 사이에는 장단점이 있습니다. 예를 들어 peephole 최적화는 컴파일 중에 수행이 빠르지만 코드의 작은 로컬 조각에만 영향을 미치며 코드 조각이 나타나는 컨텍스트와 독립적으로 수행할 수 있습니다. 반대로, 절차 간 최적화에는 더 많은 컴파일 시간과 메모리 공간이 필요하지만 여러 함수의 동작을 동시에 고려하여만 가능한 최적화를 활성화할 수 있습니다. 컴파일러, 인터프리터 및 두 가지를 모두 사용하는 “사물”의 정의에 대한 충분한 설명을 읽었습니다. 그러나, 나는 그 것들을 구별하기에 충분한 실제 예를 찾지 못했습니다. 컴파일러 : 컴파일러는 높은 수준의 언어 (예 : C, C ++)를 컴퓨터 코드로 변환하는 데 사용됩니다. 컴파일러는 소스 프로그램을 변환하는 데 사용되는 유일한 언어 프로세서가 아닙니다. 인터프리터는 표시된 작업을 변환한 다음 실행하는 컴퓨터 소프트웨어입니다. [2]:p2 번역 과정은 컴퓨터 언어의 디자인에 영향을 주어 컴파일이나 해석을 선호합니다. 실제로 컴파일된 언어에 대해 인터프리터를 구현할 수 있으며 해석된 언어에 대해 컴파일러를 구현할 수 있습니다. DARPA (국방 고급 연구 프로젝트 기관)는 1970 년에 울프의 CMU 연구 팀과 컴파일러 프로젝트를 후원했습니다.

프로덕션 품질 컴파일러 컴파일러 PQCC 디자인은 소스 언어및 대상의 공식적인 정의에서 생산 품질 컴파일러(PQC)를 생성합니다. [32] PQCC는 많은 성공없이 파서 생성기 (예 : Yacc)와 같은 전통적인 의미를 넘어 용어 컴파일러 컴파일러를 확장하려고했습니다. PQCC를 컴파일러 생성기라고 더 적절하게 지칭할 수 있습니다. 컴파일러, 어셈블러 및 인터프리터란 무엇입니까? 예제 제공 ECL 이미지가 개체 파일의 동적으로 로드를 지원하는 경우에만 이 섹션에서 예제를 수행할 수 있습니다. *기능* 변수에서 :d변수를 찾을 경우 마찬가지입니다. 예를 들어 일반적인 FreeBSD 또는 Linux 상자에서 컴파일러 분석은 컴파일러 최적화의 전제 조건이며 긴밀하게 함께 작동합니다. 예를 들어 종속성 분석은 루프 변환에 매우 중요합니다. 일부 언어 사양에는 구현에 컴파일 기능이 포함되어야 한다는 것을 명시합니다. 예를 들어, 일반적인 리스프. 그러나 커먼 리스프의 정의에 내재된 것은 해석되지 않습니다. 다른 언어에는 인터프리터에서 구현하기가 매우 쉬운 기능이 있지만 컴파일러 작성을 훨씬 어렵게 만드는 기능이 있습니다.

예를 들어 APL, SNOBOL4 및 많은 스크립팅 언어를 사용하면 프로그램이 일반 문자열 작업을 사용하여 런타임에 임의의 소스 코드를 생성한 다음 특수 평가 함수에 전달하여 해당 코드를 실행할 수 있습니다. 컴파일된 언어로 이러한 기능을 구현하려면 일반적으로 컴파일러 자체의 버전을 포함하는 런타임 라이브러리와 함께 프로그램을 제공해야 합니다. 또한 컴파일러에는 최적화를 위해 인터프리터가 포함될 수 있습니다. 예를 들어 컴파일 중에 식을 실행할 수 있고 출력 프로그램에 삽입된 결과를 실행하면 프로그램이 실행될 때마다 다시 계산할 필요가 있으므로 최종 프로그램의 속도가 크게 빨라질 수 있습니다. 적시 컴파일 및 바이트 코드 해석에 대한 현대의 추세는 때때로 컴파일러와 인터프리터의 전통적인 분류를 더욱 흐리게 합니다. 이 예제에서는 “Hello world!” 메시지를 인쇄하는 로드 가능한 확장 프로그램을 작성합니다. 먼저 hello.lisp 파일을 만들어야 합니다. 다음으로 ECL 환경을 입력하고 입력해야합니다 (컴파일 파일 “hello.lisp”). 이렇게 하면 로드 가능한 개체 파일이 생성됩니다.

컴파일러는 전처리, 어휘 분석, 구문 분석, 의미 분석(구문 지향 변환), 입력 프로그램을 중간 표현으로 변환, 코드 최적화 및 코드와 같은 많은 또는 모든 작업을 수행할 수 있습니다. 세대.