2010-04-25 3 views
0

저는 프로젝트를 설계하고 코딩하는 과정에서 초보자입니다. 이미 모든 아이디어를 가지고 있지만이 프로젝트를 계속 진행하는 데 어려움이 있습니다.컴파일러 생성 및 DirectX

나는 코드가 추악하고 읽을 수 없다고 느낀다. 나는 이런 식으로 계속할 수 없다. 이 프로젝트는 제가 생각하기에 프로그래밍 언어이며 작은 그래픽 기능을 가지고 있습니다.

초보자라도 모든 사람이 원하기 때문에 DirectX를 사용하여 코드를 작성하고 싶습니다. SDL과 같은 래퍼 라이브러리에 의존하지 않고 전적으로 코드를 작성하려고합니다.

DirectX 모듈의 리팩터링을 수행하여 모든 약점을 노출 시켰습니다. 어디서나 Direct3D 코드가 있지만 코드 자체는 거의 없습니다! 이것이 내 설계상의 결함인지 DirectX의 잘못인지 나는 모른다.

DirectX를 사용하여 프로젝트를 시작하거나 GDI와 Windows의 멀티미디어 API를 사용해야합니까? 이것은 초보자에게 좋은 진전입니까?

+0

당신이 생각하는 "작은 그래픽 기능"은 정확히 무엇입니까? 프로그래밍 언어로는 어떤 종류의 유틸리티가 있다고 생각합니까? 어떤 시나리오에서 유용할까요? –

+0

그려야 할 유일한 프레임 버퍼. 모든 그래픽 작업은 컴파일러에서 바이트 코드로 컴파일됩니다. 다소 느리지 만 C VM이 작아지고 고수준 언어로 쓰기에 어려움이 있습니다. 복잡한 작업을 매우 유연하게 처리 할 수 ​​있습니다. BASIC을 사용하는 언어이지만 절차와 간단한 프로토 타입 작성이 가능합니다. 그 후, 프로젝트가 안정화되면, PDA 용처럼 간단한 GUI를 구축 할 것입니다. 결국 플랫폼 게임은 8 비트 및 16 비트 이전 버전과 비슷합니다. 아이디어는 결국 작은 가상의 컴퓨터를 구축하는 것입니다. –

답변

1

당신의 의견을 바탕으로, 당신이 정말로 어떻게 작동 하는지를 알지 못하고 컴파일러를 작성하려고 한 것처럼 보였습니다. 그리고 모든 것을 하나의 커다란 그릇에 함께 섞어 버렸습니다.

당신은 컴파일러를 작성하는 다이렉트 X를 사용하는 방법에 대해 이야기하고

-하지만 당신이 어떤 바이트 코드로 컴파일하는 경우, 다음 컴파일러가 사용하게 될 겁니다 여부를 신경 안 된 DirectX, GDI, OpenGL을, 또는 완전히 다른 것. 인터프리터은 신경 써야하지만 그래픽 작업을 일부 opcode 세트 뒤에 추상화 한 경우 인터프리터의 용도는 중요하지 않습니다. 각 플랫폼별로 인터프리터를 작성하고 동일한 코드를 실행할 수 있습니다 .

multi-step process을 사용하면 컴파일하는 것이 일반적으로 더 쉽습니다.

  • 각 구문 구문에 대한 의미를 적어 두는 것이 좋습니다. 각 구성이하는 것뿐만 아니라 그러한 것들을하기 위해 필요한 것은 무엇인가 (타이핑 규칙 등). 기존 문법을 살펴 보는 것이 도움이되지만 언어의 복잡성에 따라 다릅니다.
  • 파서 작성 - 문법의 복잡도에 따라 수동으로 수행하거나 parser generator을 사용할 수 있습니다.
  • 의미 규칙을 확인하는 코드를 작성하십시오.
  • 명령어 세트를 만들고 VM을 정의하고 의미 체계를 사용하여 구문을 명령어로 변환하거나 이미 존재하는 것을 사용하십시오. 각각의 것에 대한 지시를 할당함으로써 "외부"사물 (그래픽 같은)을 처리 할 수도 있고, 각 연산 유형의 타겟이되는 특정 주소를 정의 할 수도 있습니다 (예를 들어 주소 0xF000에서 함수를 호출하려고하면 , 인터프리터는 특정 픽셀을 어떤 색으로 설정하는 코드를 실행해야한다). 후자의 접근 방식은 유연성을 제공하므로 CALL 명령어에 대한보다 복잡한 구현이 필요하지만 사용자의 요구에 맞는 것을 결정하는 것은 사용자의 몫입니다. 당신이 당신의 명령어 세트가있을 때

, 당신은 쉽게 그래픽 물건을 처리하기 위해 원하는대로 (다이렉트, OpenGL을, GDI, SDL을 ...)을 사용하여, 그것을 위해 통역을 쓸 수 있습니다 - 그냥 꽤 많이 큰 하나 switch 문을 사용하여 opcode를 사례로 구현했습니다. 그것이 당신이 그리는 데 사용하는 것과 관련된 코드를 배치하는 곳입니다.

이 두 파일을 하나의 프로그램에 결합하여 소스 파일을 읽고 즉시 실행할 수 있도록 문제가 있다면 그렇게 할 수는 있지만 여전히 파일을 개별 파일로 유지하는 데 도움이됩니다. 암호. 가장 간단한 방법은 먼저 바이트 코드로 컴파일 한 다음 메모리에 저장하고 인터프리터가 읽을 수있게하는 것입니다.

참고 : 컴파일러 작성은 간단한 작업이 아니라는 점을 알아야합니다. 정확하게 이 아니지만, 배울 점이 많습니다. 화제에 관하여 책을 읽는 것을 고려하십시오 - 소위 Dragon Book는 베스트의 1 개이라고 밖으로 고려된다, 그렇지 않으면 최상, 그러나 다른 좋은 책은 존재한다. 1 년 전에이 자료를 배웠을 때 Robert Sebesta가 Concepts of Programmming Languages, David Watt 및 Deryck Brown이 Programming Language Processors in Java을 사용했습니다. 지역 도서관에이 도서관이 있는지 확인할 수 있습니다.

더 많은 영감을 얻으려면 작년에 대학에서 자체 프로그래밍 언어를 만드는 과정에서 작성한 the report을 참조하십시오. 언어의 문법을 무시하십시오 - 약간 버그가있을뿐만 아니라 어떻게해야하는지에 대한 좋은 예가 아닙니다. 그러나 나머지 보고서는 문제에 접근하는 방법에 대한 아이디어를 줄 것입니다.