0

컴파일러가 언어 Y로 설계된 언어 X가 있다고 가정합니다. 여기서 언어 Y의 컴파일러는 어셈블리 언어로 설계되었습니다. 이제 X로 작성된 코드를 실행하기 위해 명령어는 언어 Y의 도움으로 컴파일됩니다. 예를 들어 X의 명령어는 Y의 컴파일러 역할을하는 Y에 대한 입력으로 표시되어 Y의 컴파일러가이를 실행하고 X에 대한 컴파일 된 코드. 여기에 Y에 제시된 지침은 어셈블리 언어로 컴파일해야합니다.어셈블리 언어로 컴파일러를 설계하는 것보다 다른 언어의 컴파일러로 컴파일러를 설계하는 것이 어떻습니까?

여기서 X의 명령어를 컴파일하려면 Y의 명령어를 컴파일해야합니다. 왜 이렇게 필요한 이유가 무엇입니까?

어셈블리 코드를 사용하여 X에서 명령어를 직접 컴파일하는 것이 위의 경우보다 쉽지는 않습니까? 어떤 의미

+1

당신은 분명히 그것을 자유롭게 할 수 있습니다 .. – harold

+2

'''''''''''''''''''''...' 어셈블러에 평범하지 않은 프로그램을 작성하려고 시도 해본 적이 있습니까? 대답은 다른 유형의 프로그램과 동일합니다. 더 쉽고 빠르며 오류가 발생하기 쉽기 때문입니다. – MikeMB

+0

컴파일러의 백엔드는 컴파일러를 만드는 가장 중요하고 값 비싼 부분입니다. 코드 생성기는 사용할 수 있지만 좋은 옵티 마이저는 매우 중요한 투자이며 성능에 중요합니다. 그런 다음 지원해야하는 모든 아키텍처에 대해 반복해서 작업해야합니다. 다른 사람의 노력을 활용하는 것이 가장 현명한 일입니다. LLVM은 천 파운드 고릴라, JVM과 .NET은 쉽게 만들 수 있습니다. 이제 보편적으로 사용할 수있는 JavaScript 불안감은 오늘날 점점 더 많이 사용됩니다. –

답변

3

아무것도 어셈블리 쉽게 없습니다. 어셈블리는 기계 코드를 생성하기 위해 궁극적으로 컴파일되어야하는 또 다른 구문입니다.

언어 'X'로 돌아 가기 : 원하는 결과에 따라 다름. 언어가 스스로 부트 스트랩을 할 것입니까? 그렇다면 점진적으로 수행되고 중간 또는 초기 컴파일은 적절한 언어로 수행 될 수 있습니다. 결국 중간 언어를 단계적으로 제거합니다. 부트 스트랩 및/또는 자체 호스팅 계획은 변경 관리에 최소한의 노력을 요구하는 가장 유연하고 호환성있는 언어 일 것이지만 일반적으로 '어셈블리'보다 높은 수준의 언어입니다.