2013-10-28 6 views
3

프로그래밍에 대한 자세한 내용을 배우려고합니다. 이제 컴파일러에 대해 배우고 있습니다. 나는 닭고기와 계란 상황에서 자아를 발견했다. 우리는 코드 나 프로그램을 실행하는 컴파일러가 필요합니다. 컴파일러 자체는 프로그램이고 컴파일러를 작성하는 데는 어떤 언어가 사용됩니까?입니까?

고맙습니다.

+0

[첫 번째 컴파일러는 어떻게 작성 되었습니까?] (http://stackoverflow.com/questions/1653649/how-was-the-first-compiler-written) – nawfal

답변

0

를 참조하지만, 그 후, 조립 컴파일러는 다른 언어로 다른 컴파일러를 컴파일하는 데 사용할 수 있습니다. 내가 막연하게 기억하고있다. C 컴파일러 언어가인데, 어셈블리 컴파일러가 작성된 후에 C 컴파일러가 C로 작성되었다는 것을 언급했다. 이제 컴파일러를 컴퓨터 명령어로 변환하는 컴파일러가 있기 때문에 컴파일러는 모든 언어로 작성할 수 있습니다. 결국, 모든 기억, 그래서 모든 바이너리된다.

0

CPU는 기계어 코드를 실행합니다. 기계어 (또는 어셈블리)는 다양한 변형이 있으며 명령어 세트 (언어)는 CPU 아키텍처에 따라 다릅니다.

물론 새로운 완전히 새로운 명령어 세트를 위해 작성된 프로그램은 어셈블리에서 직접 작성해야하며 컴파일러의 경우에도 마찬가지입니다. 각 명령어 세트에 대한 초기 컴파일러는 어셈블리로 작성해야합니다. 해당 명령어 집합에 대해 작동하는 컴파일러가 있으면 C 또는 컴파일러가 지원하는 언어로 컴파일러를 다시 작성할 수 있습니다.

GNU 컴파일러 모음 (GCC)은 틀림없이 현재까지 가장 많이 사용되는 컴파일러 중 하나이며 C++로 작성되었습니다.

새로운 명령어 세트에 대한 첫 번째 컴파일러는 간단히 어셈블리에 작성됩니다.

EDIT : 새로운 언어 용 컴파일러를 구현하는 방법에 대한 궁금증이 생겼습니다. 이것이 부트 스트래핑 (bootstrapping)이라는 프로세스를 통해 이루어 졌다고 밝혀졌지만 아직 완전히 이해하지는 못했지만 일반적인 생각은 언어 자체에 새로운 언어 용 컴파일러를 작성하는 것입니다. 나는 그것이 조금 이상하다는 것을 압니다. 이것에 대한 좋은 정보를 찾았습니다. An example of bootstrapping

Bootstrapping on wiki

  • An older SO question
    • 는 그런데 정말 좋은 질문에 감사드립니다.

  • 1

    나는 닭고기와 계란 상황에서 자아를 발견했다. 코드 나 프로그램을 실행하는 컴파일러가 필요합니다.

    이 논리는 실제로 올바르지 않습니다. 코드 나 프로그램을 실행하는 데 컴파일러가 필요하지 않습니다. 컴파일러는 사람이 읽을 수있는 코드를 실행 가능한 코드로 변환하는 데 사용됩니다. 실행 가능한 코드를 작성하는 방법은 여러 가지가 있으며 사람이 읽을 수있는 소스 코드로 시작할 필요가 없습니다.

    컴파일러 작성에 사용되는 언어는 무엇입니까?

    거의 모든 언어를 사용하여 컴파일러를 만들 수 있습니다. 컴파일러는 어셈블리 코드를 출력하여 실행 파일에 어셈블하거나 직접 실행 파일을 만들거나 중간 언어를 해석하거나 실행 파일로 변환 할 수 있습니다.

    또한 언어에 대한 첫 번째 컴파일러를 다른 언어로 작성한 다음 부트 스트랩을 통해 새 언어로 된 언어에 대한 컴파일러를 만들 수 있습니다.

    은 참조 : 자세한 내용은 Implementing a compiler in “itself”

    Basics of Compiler Design보고 특히 13 장에 : 컴파일러를 부트 스트랩.