필자는 컴파일러 문구에 대한 경험이 있으며 프로그래밍 언어에 관심이 있습니다. & 컴파일러 필드 및 새로운 프로그래밍 언어를 처음부터 새로 컴파일하는 사람을 작성하는 좋은 접근 방법에 대해 누군가가 설명해 주시겠습니까? (내 말은 스텝).새로운 컴파일러를 빌드하는 좋은 방법은 무엇입니까?
답변
첫 번째 단계는 Dragon Book을 읽는 것입니다.
이 책은 컴파일러 빌드의 모든 분야에 대한 훌륭한 소개를 제공하지만 실제로 직접 빌드하는 데 충분한 세부 사항까지 설명합니다.
다음 단계는이 책의 장을 따르는 것이 좋습니다. 튜토리얼로 작성된 것은 아니지만 실용적인 조언을 제공하므로 아이디어와 연구를위한 이상적인 허브가됩니다.
나는 GNU 컴파일러 프레임 워크를 사용하여 언어/프론트 엔드를 통합하는 방법을 살펴볼 것입니다.
그런 식으로 파서와 번역기를 gcc의 이식 가능한 객체 형식으로 작성해야합니다 (오직!). 옵티 마이저, 선택 칩의 오브젝트 코드 생성, 링커 등을 무료로 얻을 수 있습니다.
또 다른 대안은 Java JVM을 대상으로하는 것입니다. 가상 시스템은 잘 문서화되어 있으며 JVM 명령어 세트는 x86 머신 코드보다 훨씬 더 엄격합니다.
원하는 작업에 따라 다릅니다. 모든 것이 처음부터 어떻게 작동하는지 정말로 알고 싶다면 GCC는 매우 혼란스러운 방법입니다. –
드래곤 북을 오래 사용하지 마십시오. 대부분 구식입니다. 대부분의 물건에는 기묘한 이름을 사용합니다.
도서의 경우 Apple의 Tiger Book 또는 Cooper 's Engineering 컴파일러를 권해드립니다. http://llvm.org/docs/tutorial/
에 대한 물건의 무리를 다시 구현하지 않아도 그래서 당신은 llvm 같은 프레임 워크를 사용하는 게 좋을 것은 LLVM 언어를 구축하기위한 튜토리얼입니다
필자는 특정 책이 없어도 컴파일러를 작성할 수있었습니다 (필자는 과거에 일부 컴파일러 서적을 읽었지만 실제 세부 사항은 없었 음).
가장 먼저해야 할 일은 "컴파일러 컴파일러"유형 도구 (flex, bison, antlr, javacc)로 실행하고 문법을 작동시키는 것입니다. 그래머 문법은 대부분 직설적이지만, 항상 방해가되어 모든 것을 망칠 수 있습니다. 특히 표현, 우선 순위 등과 같은 것들.
더 단순한 더 단순한 언어는 이유가 있기 때문에 더 간단합니다. 그것은 파서를 "그냥 일하게"만듭니다. 재귀 적으로 적절하게 처리 할 수있는 Pascal 변형을 고려하십시오.
문법이 없기 때문에 언어가 없기 때문에이 내용을 언급합니다. 제대로 구문 분석하고 렉싱 할 수 없으면 매우 빠르게 갈 수 없습니다. 그리고 새로운 언어로 12 개의 샘플 코드를 보는 것은 많은 토큰에 의존하게되고 구문 노드는 실제로 정말 놀랍습니다. "와우, 정말 효과가 있습니다."이런 식으로. 말 그대로 "거의 모든 것이 효과가있다"또는 "전혀 효과가 없다"는 말입니다. 특히 시작 부분에서 그렇습니다. 실제로 작동하면 실제로 해제 할 수있는 것처럼 느껴집니다.
그리고 일단 그 부분이 완성되면 근본적인 런타임을 가져야하기 때문에 어느 정도 사실입니다. 컴파일 된 "a = 1 + 1"을 얻으면 새로운 작업의 대부분이 뒤에 있으며 이제 나머지 연산자를 구현하면됩니다.이는 기본적으로 조회 테이블과 참조를 관리하는 작업이되며 프로세스의 어느 시점에서 어느 위치에 있는지 알 수 있습니다.
새로운 구문, 혁신적인 런타임 등을 사용하여 스스로 해결할 수 있습니다.하지만 시간이 있다면 이미 완료된 언어를 사용하는 것이 가장 좋으며 모든 단계를 이해하고 구현하는 것이 가장 좋습니다 , 그리고 당신이 정말로 원하는 언어를 쓰고 있는지, 당신이 지금하고있는 것을 어떻게 다르게 할 것인지 생각해보십시오.
컴파일러 작성에 많은 역학이 있으며 프로세스를 성공적으로 수행하면 한 번 돌아와 자신 만의 새로운 언어로 다시하고 싶을 때 훨씬 자신감을 갖게됩니다.
- 1. 최신 glibc가 필요없는 소프트웨어를 빌드하는 가장 좋은 방법은 무엇입니까?
- 2. C에서 컴파일러를 코딩하는 방법은 무엇입니까?
- 3. json에서 HTML을 빌드하는 가장 좋은 방법
- 4. Java로 HTML 파일을 빌드하는 가장 좋은 방법은 무엇입니까?
- 5. FDT 저장시에만 빌드하는 방법은 무엇입니까?
- 6. x64에서 앱을 빌드하는 방법은 무엇입니까?
- 7. 버전 번호가있는 경로에서 컴파일러를 찾는 방법은 무엇입니까?
- 8. 작성된 소스 파일에서 실행 파일을 빌드하는 방법은 무엇입니까?
- 9. Linux에서 BlackBerry 응용 프로그램을 빌드하는 방법은 무엇입니까?
- 10. 심볼이있는 릴리스 모드에서 OpenSSL을 빌드하는 방법은 무엇입니까?
- 11. 코드에서 csproj 파일을 빌드하는 효과적인 방법은 무엇입니까?
- 12. MATLAB을 사용하여 levmar를 빌드하는 방법은 무엇입니까?
- 13. osx10.5에서 install_name_tool을 수동으로 빌드하는 방법은 무엇입니까?
- 14. 소스 코드에서 MVVMToolkit을 빌드하는 방법은 무엇입니까?
- 15. Eclipse CDT로 SCons 프로젝트를 빌드하는 방법은 무엇입니까?
- 16. 소스 코드에서 libpthread.so를 빌드하는 방법은 무엇입니까?
- 17. Maven으로 이클립스 플러그인을 빌드하는 방법은 무엇입니까?
- 18. Eclipse에서 Java Servlet을 빌드하는 방법은 무엇입니까?
- 19. 여러 프로젝트로 DLL을 빌드하는 올바른 방법은 무엇입니까?
- 20. JavaScript에서 클래스를 빌드하는 올바른 방법은 무엇입니까?
- 21. 라이브러리 만 빌드하는 makefile을 작성하는 방법은 무엇입니까?
- 22. 파서와 컴파일러를 작성하는 데 가장 좋은 프로그래밍 언어는 무엇입니까?
- 23. '작업을 빌드하는 방법을 모름'부트 스트랩이란 무엇입니까?
- 24. 새로운 Drupal 모듈을 만들어야하는지 결정하는 가장 좋은 방법은 무엇입니까?
- 25. 웹 서비스가 고객에게 새로운 데이터를 알리는 가장 좋은 방법은 무엇입니까?
- 26. Plone의 새로운 주요 버전으로 업그레이드하는 가장 좋은 방법은 무엇입니까?
- 27. 프로그래머가 새로운 언어 학습에 접근하는 가장 좋은 방법은 무엇입니까?
- 28. 웹 사이트에서 새로운 비공개 메시지를 확인하는 가장 좋은 방법은 무엇입니까?
- 29. REST 서비스를 빌드하는 데 가장 좋은 .NET API는 무엇입니까
- 30. NSManagedObjects NSDate 특성의 달에 의해 정의 된 섹션으로 그룹화 나열합니다 UITableView 빌드하는 가장 좋은 방법은 무엇입니까?
제발, 너희들은 용서를 인용하는 것을 정말로 멈춰야한다. ... 그것은 최악의 컴파일러 책 중 하나이다. 당신은 Appel, Cooper 등을 인용 할 수 있습니다. 그러나 Dragon Book이 아닌 * please *하시기 바랍니다. – tonfa
"현대 컴파일러 구현"(Appel)은 매우 잘못 작성되었으며 "Engineering a Compiler"(Cooper)는 초보자에게 적합하지 않습니다. –
그것은 마법의 용서 북보다 나쁠 수 없습니다. 저는 개인적으로 호랑이 책이 잘못 작성된 것을 발견하지 못했습니다. 그러나 표지에서 그것을 읽지는 않았지만 아주 좋은 통찰력을 많이 가지고 있음을 발견했습니다. – tonfa