2011-08-19 5 views
-1

저는 컴파일러, 운영 체제 및 컴퓨터 시스템이 내부적으로 어떻게 작동하는지 배우려고합니다. 여기 내 현재 계획입니다 :컴파일러에 대해 배울 수있는 가장 좋은 방법은 무엇입니까?

  1. 는 기계 언어로 작성된 입력을 받아 들일 수, C에서 간단한 가상 머신을 쓰기
  2. 그 가상 컴퓨터의 어셈블러 쓰기 (내 사양의 사용자 지정 언어를.).
  3. 컴퓨터의 기본 언어와 같은 매우 기본적인 컴파일러를 작성하십시오.
  4. 화면을 포함시켜 가상 머신의 상호 작용을 확장하고 (SDL을 사용할 것입니다) 비디오 메모리를 통해 해당 화면에 대한 인터페이스를 확장하십시오. 마우스/키보드 기능을 추가 할 수도 있습니다.

팁이나 권장 사항이 좋을 것입니다. 미리 감사드립니다.

답변

0

첫 번째 조언은 주제에 대한 높은 수준의 책을 읽는 것입니다. 즉, 아직하지 않은 것으로 가정하고 일부 온라인 자습서 또는 기타 작업을 계획하고 있습니다. 적어도 나를 위해, 나는 을 좋아한다.가 첫번째로 이것과 같은 물건에 머리를 급강하시키고 싶어한다, 그렇지만 나는 나의 머리 위를 급하게 느끼고, 그 다음 단지 프로젝트를 포기한다. 프로젝트를 시작하기 전에 프로젝트에 대한 높은 수준의 이해가 있는지 확인하면 대단히 도움이됩니다.

하나의 시리즈는 Write Great Code 장이 좋습니다. 나는 모든 것을 다 읽지 않았기 때문에 전체 시리즈를 보증 할 수는 없지만 직장에있는 사무실은 내가 가지고있는 것들에 대해 꽤 잘 이해하기 위해 여러 번 사용했다. 예를 들어, 당신의 계획과 직접적으로 관련이있을 수있는 한 가지 예제는 GCC 컴파일러가 생성하는 ELF 바이너리, 각 섹션의 정의, 그리고 그곳에 저장된 내용을 GCC 컴파일러가 어떻게 구성했는지 이해해야 할 필요가있었습니다. (이것은 임베디드 시스템을위한 것이었고 우리는 RAM을 확장하여 일부 재구성해야했습니다 ...)

당신은 "너무 힘들지 않습니다"라고 말했습니다. 제 의견으로는 당신의 단계가 이미 상당히 어려워 진 것 같습니다. 특히 최종 목표가 컴파일러와 운영 체제에 대해 배우는 것이면 더욱 그렇습니다.나는 적어도이 가상 머신을 건너 뛸 것이다. 실제로 프로세서는 매우 단순하며 '기계어'만 처리한다는 것을 이미 알고 있다는 사실에 기반하여 이미 좋은 시작 파악을 할 수 있습니다.

대신에 3 단계부터 시작하여 자신 만의 컴파일러를 작성합니다. 나는 대학에서 컴파일러 수업을 들었고 학기 말까지, 나는 처음부터 을 사용하여 만든 파스칼 컴파일러를 사용했다. 그것은 아주 계몽적이었습니다. 또한 Bison을 yacc와 함께 사용하는 것으로 볼 수 있습니다. 나는 그것을 결코 사용하지 않았다.

또한 자유 시간에 약간의 연습 만하면 GCC를 조작하여 hello world를 X 바이트보다 작게 컴파일하는 방법을 생각하는 것보다 더 많은 것을 가르쳐 줄 것입니다. (웹상에 꽤 많은 예제가 있습니다.)

재미 있습니다!

+0

감사합니다. 나는 꽤 많이 렉싱/파싱을 해왔다. 나의 도전은 이제 AST를 만들고 코드 생성을 수행하는 것이다 (나는 x86 어셈블리를 배우고 싶지 않았기 때문에 내 자신의 VM을 내 자신의 커스텀으로 작성하려고했다. 내가 익숙한 지시.) – ouiliame

+0

당신은 내가 그때 깨달았 던 것보다 더 멀다! 네, 코드 생성이 가장 어렵다는 것을 기억합니다. 분명히 알 수있는 것보다 x86 어셈블리가 적다는 것을 기억합니다.하지만 운좋게도 명령어의 서브셋을 알아야만합니다. – Lncn

0

얼마나 많은 프로그래밍을 알고 있습니까?

FORTH 인터프리터를 작성하는 것이 좋습니다. 비교적 간단하며 언어와 의미는 이미 잘 정의되어 있으므로 처음부터 자신의 시스템을 설계 할 필요가 없습니다. FORTH는 일반적으로 컴파일러 (C 컴파일러와 같지는 않지만)를 가지고 있으며 어셈블러가 내장되어있어이를 조사 할 수도 있습니다. 메모리 관리, 포인터 처리, 참조 해결 등의 정신적 도구를 제공합니다.

기존의 간단한 컴파일러를 보면 도움이 될 것입니다. 일단 컴파일러가 하나의 심볼 세트를 다른 것으로 변환한다면, 문법 및 관련 주제의 구문 분석을 시작하는 것이 좋습니다. 정보가 너무 많습니다. 한 번에 조금씩 가져 가면 매우 쉽게 압도 될 것입니다.

0

큰 목표 목록입니다. 어떤 사람들은 그것을 배우기 위해 4 년 동안 대학에갑니다. 나는 당신의 배경을 모른다.하지만 기본 프로그래밍 (BASIC 프로그래밍?)과 어셈블리 언어를 해왔다고 가정 할 수도있다. 아직 시작하지 않았다면 시작해야 할 곳입니다. 문법과 정규 표현식에 대해 배우고 그 문법을 사용하여 파스칼과 같은 쉬운 문법을 사용하여 간단한 언어 부분에 대해 파서 및 통역사를 개발하면 프론트 엔드를 배울 수 있습니다. 그런 다음 어셈블리를 생성하는 코드를 추가하십시오. 백엔드입니다.

관련 문제