문제

나는 간단한 언어를 컴파일하는 간단한 컴파일러를 찾고 있습니다. 그것에 대해 논문을 작성하고 컴파일러의 작동 방식을 배우려면 간단한 언어를 찾는 것이 아닙니다 (간단하게는 작은 코드를 의미합니다. 예를 들어 GCC는 너무 큽니다). 모든 도움이 감사합니다.

도움이 되었습니까?

해결책

코드를보고 싶다면 Eijiro Sumii의 것에 깊은 인상을 받았습니다. Mincaml 컴파일러.

  • 길이는 2000 줄에 불과합니다.

  • 그것은 매우 흥미로운 소스 언어를 컴파일합니다.

  • 실제 기계 코드를 생성합니다.

  • 컴파일 된 코드의 속도는 GCC 및 기본 OCAML 컴파일러와 경쟁력이 있습니다.

  • 컴파일러는 교육을 위해 설계되었습니다.

내가 매우 감동했다고 언급 했습니까?

다른 팁

추천합니다 Tinyscheme 또는 존스 포스.

Jack Crenshaw, 박사 실제 수치 방법에 대해 광범위하게 글을 쓴 사람은 오랫동안 컴파일러를 두려워했습니다. 그는 마침내 무서워서 피곤해졌으며, 주제에 대해 스스로를 가르치는 동안 배운 내용을 바탕으로 컴파일러 구성에 대한 다단계 튜토리얼을 썼습니다.

보다 "컴파일러를 만들자" 자세한 내용은. 완전하지 않은 경우에 유의하십시오. 그는 그것을 완성하기 전에 증기가 부족했지만 거기에는 쉽게 소화 할 수있는 정보가 많이 있습니다.

약 1000 줄의 코드. 체계를 LLVM 어셈블러 또는 C로 컴파일합니다. 나는 이것이 컴파일러에 종이에 적합하다고 말할 것입니다. 더 깊이 가고 싶다면 책을 추천합니다 "SICP".

PL/0에 대한 간단한 컴파일러 (작은 파스칼 유사 서브 세트 - 매개 변수, 정수 데이터 만)를보십시오. Pascal로 작성된 소스는 약 500 줄의 코드이며 따라 가기 쉽습니다. 이것은 당신이 봐야 할 전부 일 수 있습니다.

그러나 조금 더 멀리 가고 싶다면 일단 편안하면 Pascal-S의 소스를보십시오. 이것은 파스칼의 더 큰 부분 집합을위한 컴파일러이지만 매개 변수 통과, 추가 데이터 유형, 배열 및 레코드 (구조)와 같은 추가 개념이 포함되어 있습니다. 그럼에도 불구하고 그것은 약 2000 줄의 코드이며 PL/0을 마스터 한 후에는 쉽게 따라갈 수 있습니다.

여기에서 소스를 찾을 수 있습니다.

http://standardpascal.org/source.html

당신이 사용할 수있는 것이 많고, 가장 쉬운 것은 당신의 경험에 달려 있습니다.

먼저 언어와 관련하여 :

  1. 가장 간단한 것은 장난감 언어, 예를 들어 산술 표현식을 컴파일하는 것입니다.
  2. 다음은 어셈블러입니다 - 다시 한 번 번역하지만 구문 분석의 기본 사항을 보여주고 OP 코드로 전환합니다.
  3. 다음은 아마도 순수한 어셈블러에 매우 가까운 C와 같은 C와 같은 것일 것입니다.

다음으로 컴파일러를 선택하십시오.

어셈블러를 기계 코드로 바꾸는 어셈블러부터 시작할 수 있습니다. 이것은 컴파일러를 생산하는 첫 번째 단계였습니다. 6502 또는 8080은 매우 간단합니다. 같은 것 어셈블러의 개발 키트 당신을 위해 잘 작동 할 수 있습니다 (예제와 함께)

많은 사람들 (나를 포함하여)은 컴파일러를 작성하는 가장 쉬운 언어가 기능적이라고 주장 할 것입니다. 요즘은 아마도 Haskell, Stand 또는 Common LISP를 의미합니다. 그것이 얼마나 쉬운 지에 대한 예입니다 이 블로그 게시물. 그는 산술 표현을 몇 줄로 컴파일하는 컴파일러를 작성합니다. 이것은 당신에게 충분히 최소화 될 수 있습니다.

학업 수준에서 컴파일러를 작성하는 거의 모든 소개는 예를 들어 최소한의 언어로 시작합니다. Dragon Book http://en.wikipedia.org/wiki/dragon_book_28computer_science%29 항상 권장되지만 다른 좋은 것들이 있습니다.

대학에서는 C를 사용했지만 C와 비슷하지만 컴파일러를 작성하기가 더 쉽습니다. 많은 리소스 : http://www.cminusminus.org/qc--.html

컴파일러를 원하고 Java와 같은 언어를 알고 있다면 Javacc, 문법을 사용하여 언어가 지정되는 경우. 거기 있습니다 여기에 문법이 많이 있습니다 - 시작하려면 C와 같은 간단한 것을 선택하십시오.

컴파일러 디자인에 관한 책을 읽어야합니다. 그것은 당신이 알고 싶은 이론과 적절한 간단한 예를 가져야합니다.

"The Dragon Book"을 추천합니다. 컴파일러 설계의 원리, Aho와 Ullman에 의해. 내가 읽은 지 몇 년이 지났으므로 어떤 예제를 사용할 수 있는지 정확히 기억하지 못하지만 아주 좋은 텍스트입니다.

Lispes (계획 등)는 가장 간단한 실제 언어입니다. Perl에서 원시 체계 통역사를 구축하는 방법을 볼 수 있습니다. 이 책 (종이 버전 여기 Lulu에서). 구문 분석, 유형 검사는 통역사 및 컴파일러에서 유사합니다. 그러면 여기에 a 컴파일러 디자인 주제에 대한 더 많은 하드 코어 책 (또한 가능합니다 룰루에 죽은 나무).

이전의 IT 학교에서는 C ++로 컴파일러를 개발해야했지만 처음부터는 없었습니다. 단계, 학습 곡선 등이있었습니다.

호랑이 컴파일러의 개념 그리고 Projet 할당

모든 문서를 사용할 수 있지만 코드 자체는 그렇지 않으므로 직접 수행해야합니다.

이해할 수 있고 사용 가능한 정보가 많이 있으며 컴파일러 코딩하는 법을 배우기위한 좋은 출발 일 수 있습니다.

Google UCSD 파스칼. 70 년대에 획기적인 사람이었습니다. 어쩌면 당신이 원하는 것보다 더 많을 지 모르지만 당시에는 많은 "마이크로"칩으로 쉽게 포팅되었습니다.

이것은 단지 300 줄의 일반 코드이며 간단한 보편적 언어를 구현합니다. 링크 텍스트 , 당신이 찾고 있던 것과 비슷한가요?

Bjarne Stroustrup의 재미있는 책 "The C ++ 프로그래밍 언어"의 계산기 예를 볼 수 있습니다.

더 진보 된 것을 원한다면 Boost :: spirit의 소스 코드를 읽으십시오.

단순한 관점에 따라 다릅니다. 다양한 Brainfuck 컴파일러 중 하나를 볼 수 있습니다. 그것은 매우 간단한 언어이며 컴파일러는 작습니다. 그러나 이것이 "실제"컴파일러가 어떻게 작동하는지에 대해 얼마나 많이 말할지 모르겠습니다.

작은 C 컴파일러를 보는 것은 어떻습니까? C는 컴파일되지 않았으며 이것이 컴파일러 구성에 대한 통찰력을 줄 것이라고 생각합니다.

Antlr 3.x 컴파일러 작성에 대한 비디오 자습서를 시작했습니다.

http://javadude.com/articles/antlr3xtut

곧 더 추가하겠습니다! -Scott

이 책을 시도 할 수도 있습니다. 컴퓨팅 시스템의 요소.

마이크로 프로세서 설계에서 컴파일러를 사용하여 언어로 바로 다루려는 책이지만 관련 장에 집중할 수 있습니다.

10 장 : 구문 분석 컴파일러 프론트 엔드 부분에만 집중하려면 작업 할 수있는 것입니다. 하지만, 9 장 컴파일러가 구현되는 고급 언어의 설계를 설명하므로 사전 반품이어야합니다. 이 높은 수준의 언어는 실제로 언어와 같은 간단한 OO Java이므로 컴파일러는 실제로 VM으로 컴파일됩니다.

가장 중요한 부분은 실제로 지시를 따르고 선택한 언어로 프론트 엔드 부분을 구현할 수 있다는 것입니다. 컴파일러 이론과 결합하면 젤을 잘 젤입니다.

그리고 당신은 나의 책에 대한 나의 리뷰를 찾을 수 있습니다 여기.

두뇌 매우 단순한 언어를위한 컴파일러입니다 Brainfuck.

컴파일러 쓰기의 리소스를위한 표준 스택 오버플로 리소스는 다음과 같습니다. 컴파일러 작성 배우기

그만큼 내가 아는 가장 작은 실용 컴파일러는 Metaii입니다, 40 라인 자체 설명을 가지고 있으며 흥미로운 계산을 숨기는 특수 런타임 시스템을 사용하여 자체적으로 컴파일 할 수 있습니다 (여기에 나열된 대부분의 컴파일러는 Metaii의 경우보다 큰 런타임 시스템을 가정합니다. 메타 스펠이 다소 훌륭하게 강화되었지만 이것으로 시작하는 실제 컴파일러를 구축합니다.

거기 있습니다 더 작게 만들기 위해 노력했습니다. 나는이 방향에 따라 실용적인 컴파일러가 있다고 생각하지 않습니다.

이것들은 논문을 쓸 가치가 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top