2009-10-12 2 views

답변

9

첫 번째 단계는 Dragon Book을 읽는 것입니다.

이 책은 컴파일러 빌드의 모든 분야에 대한 훌륭한 소개를 제공하지만 실제로 직접 빌드하는 데 충분한 세부 사항까지 설명합니다.

다음 단계는이 책의 장을 따르는 것이 좋습니다. 튜토리얼로 작성된 것은 아니지만 실용적인 조언을 제공하므로 아이디어와 연구를위한 이상적인 허브가됩니다.

+2

제발, 너희들은 용서를 인용하는 것을 정말로 멈춰야한다. ... 그것은 최악의 컴파일러 책 중 하나이다. 당신은 Appel, Cooper 등을 인용 할 수 있습니다. 그러나 Dragon Book이 아닌 * please *하시기 바랍니다. – tonfa

+1

"현대 컴파일러 구현"(Appel)은 매우 잘못 작성되었으며 "Engineering a Compiler"(Cooper)는 초보자에게 적합하지 않습니다. –

+0

그것은 마법의 용서 북보다 나쁠 수 없습니다. 저는 개인적으로 호랑이 책이 잘못 작성된 것을 발견하지 못했습니다. 그러나 표지에서 그것을 읽지는 않았지만 아주 좋은 통찰력을 많이 가지고 있음을 발견했습니다. – tonfa

3

나는 GNU 컴파일러 프레임 워크를 사용하여 언어/프론트 엔드를 통합하는 방법을 살펴볼 것입니다.

그런 식으로 파서와 번역기를 gcc의 이식 가능한 객체 형식으로 작성해야합니다 (오직!). 옵티 마이저, 선택 칩의 오브젝트 코드 생성, 링커 등을 무료로 얻을 수 있습니다.

또 다른 대안은 Java JVM을 대상으로하는 것입니다. 가상 시스템은 잘 문서화되어 있으며 JVM 명령어 세트는 x86 머신 코드보다 훨씬 더 엄격합니다.

+1

원하는 작업에 따라 다릅니다. 모든 것이 처음부터 어떻게 작동하는지 정말로 알고 싶다면 GCC는 매우 혼란스러운 방법입니다. –

5

드래곤 북을 오래 사용하지 마십시오. 대부분 구식입니다. 대부분의 물건에는 기묘한 이름을 사용합니다.

도서의 경우 Apple의 Tiger Book 또는 Cooper 's Engineering 컴파일러를 권해드립니다. http://llvm.org/docs/tutorial/

2
: 난 강력하게 당신이 코드 생성 등이 여기에

에 대한 물건의 무리를 다시 구현하지 않아도 그래서 당신은 llvm 같은 프레임 워크를 사용하는 게 좋을 것은 LLVM 언어를 구축하기위한 튜토리얼입니다

필자는 특정 책이 없어도 컴파일러를 작성할 수있었습니다 (필자는 과거에 일부 컴파일러 서적을 읽었지만 실제 세부 사항은 없었 음).

가장 먼저해야 할 일은 "컴파일러 컴파일러"유형 도구 (flex, bison, antlr, javacc)로 실행하고 문법을 작동시키는 것입니다. 그래머 문법은 대부분 직설적이지만, 항상 방해가되어 모든 것을 망칠 수 있습니다. 특히 표현, 우선 순위 등과 같은 것들.

더 단순한 더 단순한 언어는 이유가 있기 때문에 더 간단합니다. 그것은 파서를 "그냥 일하게"만듭니다. 재귀 적으로 적절하게 처리 할 수있는 Pascal 변형을 고려하십시오.

문법이 없기 때문에 언어가 없기 때문에이 내용을 언급합니다. 제대로 구문 분석하고 렉싱 할 수 없으면 매우 빠르게 갈 수 없습니다. 그리고 새로운 언어로 12 개의 샘플 코드를 보는 것은 많은 토큰에 의존하게되고 구문 노드는 실제로 정말 놀랍습니다. "와우, 정말 효과가 있습니다."이런 식으로. 말 그대로 "거의 모든 것이 효과가있다"또는 "전혀 효과가 없다"는 말입니다. 특히 시작 부분에서 그렇습니다. 실제로 작동하면 실제로 해제 할 수있는 것처럼 느껴집니다.

그리고 일단 그 부분이 완성되면 근본적인 런타임을 가져야하기 때문에 어느 정도 사실입니다. 컴파일 된 "a = 1 + 1"을 얻으면 새로운 작업의 대부분이 뒤에 있으며 이제 나머지 연산자를 구현하면됩니다.이는 기본적으로 조회 테이블과 참조를 관리하는 작업이되며 프로세스의 어느 시점에서 어느 위치에 있는지 알 수 있습니다.

새로운 구문, 혁신적인 런타임 등을 사용하여 스스로 해결할 수 있습니다.하지만 시간이 있다면 이미 완료된 언어를 사용하는 것이 가장 좋으며 모든 단계를 이해하고 구현하는 것이 가장 좋습니다 , 그리고 당신이 정말로 원하는 언어를 쓰고 있는지, 당신이 지금하고있는 것을 어떻게 다르게 할 것인지 생각해보십시오.

컴파일러 작성에 많은 역학이 있으며 프로세스를 성공적으로 수행하면 한 번 돌아와 자신 만의 새로운 언어로 다시하고 싶을 때 훨씬 자신감을 갖게됩니다.

관련 문제