자체 프로그래밍 언어 컴파일


10

저는 컴퓨터 과학 학생입니다. 고유 한 프로그래밍 언어 (명령이 거의없는 기본 언어)를 만들고 싶습니다.

구문 분석기를 수행하는 방법을 알고 있습니다. 이미 Perl에서 수행했습니다. 기사에서 컴파일러에 대해 읽은 것은 컴파일러 자체입니다.

예를 들어 C 컴파일러는 C로 작성되었습니다. 어떻게 가능합니까? 나는 내 자신의 언어를 만들 수 있지만 어떻게 그것을 실행할 수 있는지 모르겠습니까? 어떤 생각?

정말 좋은 질문이며 프로젝트에 블로그를 작성할 수 있습니다.


사람들은 부트 스트랩 방법을 설명했지만 왜해야합니까? C, Perl 등으로 작성된 컴파일러를 사용하여 언어를 컴파일 할 수있는 이유는 없습니다. 물론, 자신의 언어로 작성된 컴파일러를 작성하는 것이 좋지만 많은 작업이 필요합니다 .-- 적어도 두 개의 컴파일러를 작성해야합니다 (C / Perl / Whatever, 당신의 언어).
David Richerby

흠 .. C로 첫 번째 컴파일러를 작성하고 내 언어로 두 번째 컴파일러를 작성한다고 생각합니다. 작은 프로그래밍 언어를 만드는 것이 정말 흥미 롭습니다. 많은 컴퓨터 과학을 배울 수 있습니다
BaptisteL

답변:


13

트릭은 부트 스트랩 입니다. 먼저 언어에 대한 컴파일러 (또는 그 일부)를 다른 언어로 작성하십시오. 그런 다음 언어로 된 언어 (또는 이미 처리 할 수있는 언어의 큰 하위 집합)에 대한 컴파일러를 작성합니다. 이전 컴파일러를 사용하여 새 컴파일러를 컴파일하면 새 컴파일러 자체를 컴파일 할 수 있습니다.


그래서 C를 사용하여 첫 번째 컴파일러를 만들 수 있으며 다음에 컴파일러 v2를 v1로 컴파일 할 것입니까? 그러나 문제가 있습니다. 컴파일러에 문제가 없다는 것을 어떻게 알 수 있습니까? 소스 코드를 어셈블러로 변환해야합니까? 아니면 다른 것?
BaptisteL

2
컴파일러에 문제가 없음을 어떻게 알 수 있습니까? 보다 일반적으로 프로그램을 작성했습니다. 버그가 없다는 것을 어떻게 알 수 있습니까? 당신은하지 않습니다. 당신은 몇 가지 테스트를 작성하고 최선을 다하겠습니다. 소스 코드를 어셈블리로 변환해야합니까? 기필코 아니다. C 컴파일러를 신뢰할 수 있습니다. 동일한 작업을 수행하지만 어셈블리가 C (또는 선택한 다른 언어)로 바뀝니다.
Yuval Filmus

그래, 내 기술을 신뢰해야합니다 ^^ 프로세스에 컴파일러를 요청하고 싶었습니다. 컴파일러가 무엇을하는지 이해하지 못합니다. 구문 및 어휘 분석기는 괜찮지 만 다음은 ??
BaptisteL

그런 다음 코드를 생성합니다. 머신 코드 생성에 대한 자세한 정보를 원하지 않으면 언제든지 C 코드와 같은 다른 언어로 코드를 생성하고 외부 컴파일러를 사용하여 머신 코드로 컴파일 할 수 있습니다. (또는 당신은 해석 언어를 사용하고 통역을 실행할 수 있습니다.)
Yuval 교수 Filmus에게

흠 아니오 나는 그것을 좋아한다 : 나의 언어 입력-> 기계어 코드. 언어를 다른 언어로 변환하고 싶지 않습니다 (처음 컴파일과 동일) 가능합니까?
BaptisteL

2

자체 소스를 컴파일 할 수있는 컴파일러를 자체 호스팅 컴파일러 라고합니다 . 초기 컴파일러는 다른 언어로 작성되었습니다. 예를 들어, 첫 번째 C 컴파일러는 어셈블러로 작성되었을 수 있습니다. 이전의 하위 수준 컴파일러를 사용하는 모든 방법을 부트 스트랩이라고합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.