编译器构造与DirectX
我是一个设计和编码项目的初学者,我已经有了所有的想法,但我有一个问题阻碍了我继续这个项目 我觉得代码很难看,不可读,我不能继续这样做。这个项目是我脑海中的一种编程语言,它有很小的图形功能 即使是初学者,我也希望使用DirectX编写代码,因为每个人都想要它。我想完全编码它,而不是依赖于任何像SDL这样的包装库 我对DirectX模块进行了重构,它暴露了所有漏洞。到处都有Direct3D代码,但代码本身做的很少!我不知道这是我的设计错误还是DirectX的错误编译器构造与DirectX,directx,project,gdi,compiler-construction,Directx,Project,Gdi,Compiler Construction,我是一个设计和编码项目的初学者,我已经有了所有的想法,但我有一个问题阻碍了我继续这个项目 我觉得代码很难看,不可读,我不能继续这样做。这个项目是我脑海中的一种编程语言,它有很小的图形功能 即使是初学者,我也希望使用DirectX编写代码,因为每个人都想要它。我想完全编码它,而不是依赖于任何像SDL这样的包装库 我对DirectX模块进行了重构,它暴露了所有漏洞。到处都有Direct3D代码,但代码本身做的很少!我不知道这是我的设计错误还是DirectX的错误 我会使用DirectX开始构建这样的
我会使用DirectX开始构建这样的项目,还是只使用GDI和Windows的多媒体API?对于初学者来说,这是一个很好的进步?根据您的评论,听起来您试图编写一个编译器,但实际上并不知道它是如何工作的,最终将所有内容混合在一个大碗中 你说的是使用DirectX来编写编译器——但是如果你要将它编译成字节码,那么编译器就不应该关心你最终是否会使用DirectX、GDI、OpenGL或其他完全不同的东西。解释器需要注意,但是如果您已经将图形操作抽象到一组操作码后面,那么解释器使用什么并不重要——您可以为每个不同的平台编写一个解释器并运行相同的代码 如果使用。你可能想从零开始:
- 做一个语法,写下每个句法结构的语义;不仅仅是每个构造做什么,还包括它做这些事情所需要的东西(键入规则等)。您可能会发现查看现有语法很有帮助,但这取决于您语言的复杂性
- 编写一个解析器——根据语法的复杂性,您可以手工或使用语法分析器
- 编写代码检查语义规则
- 创建一个指令集并定义一个VM,并使用您的语义将您的构造转换为指令(或使用已经存在的东西)。您可以通过为每件事情分配指令来处理“外部”事情(如图形),或者您可以定义作为每种类型操作目标的特定地址(因此,如果您尝试在地址0xF000处调用函数,那么解释器必须执行代码以将特定像素设置为某种颜色)。后一种方法为您提供了更大的灵活性(意味着您可以将操作码用于其他用途),但代价是CALL指令的实现更为复杂——由您决定什么适合您的需要
如果你想要更多的灵感,看看我们去年在大学里写的,作为创建我们自己的编程语言的一部分。忽略该语言的语法-不仅有点问题,而且它也不是一个很好的例子,说明你应该如何做-但是报告的其余部分可能会给你一些关于如何解决问题的想法。你到底在想什么是“小图形功能”?您认为您的编程语言将具有什么样的实用程序?在什么情况下它会有用?它只是一个可以利用的帧缓冲区。编译器将以字节码编译所有图形操作。这有点慢,但我认为C虚拟机变小了,用高级语言编写它是值得的。之后编写复杂的代码非常灵活。它是一种具有基本感觉的语言,但具有过程和对象的简单原型。之后,当项目稳定后,我将为它构建一个简单的GUI,就像PDA一样。最后,像8位和16位之前的控制台这样的平台游戏。这个想法是在最后建造一台微型虚拟计算机。