【问题标题】:How to convert High/Low level Programing Code into Machine Code directly? [closed]如何将高/低级编程代码直接转换为机器代码? [关闭]
【发布时间】:2017-01-25 04:08:17
【问题描述】:

我想设计和开发自己的编程语言和编译器。我仍然是一名了解 C/C++ 的数学本科生。我几乎没有进行网络研究并阅读了一些电子书,但其中大多数使用特定工具将对象/中间代码转换为机器代码,其中大多数解释了如何使用汇编程序将新的编程语言转换为机器代码。那里有很多教程/参考资料“如何将程序集转换为机器操作代码”,但它们为新手跳过了一些级别。我想深入探讨这个主题。 - 假设我设计了自己的编程语言(假设它被称为 = "MW")并具有正确的语法和运算符。


问题

如何将MW语言代码直接转换为机器码,以便为O/S生成可执行文件?

如果您能给出非常明确和解释性的答案,我们将不胜感激。 由于我不是计算机科学专业的学生,​​我需要一些指导和逐步描述如何以及为什么? 如果有人知道这方面的好书或网站,请回复。

  • 我的目的是构建一个像“Wolfram”这样的系统 Mathematica”。请不要围绕编程争论 语言类型,例如 - 符号、程序、数字等。

谢谢。

【问题讨论】:

  • 你懂C还是你懂C++?请注意,这两种语言不是一回事。您应该为您的实施选择一个。
  • 对 SO 来说太宽泛了,但是给“龙书”一个谷歌。
  • @fuz 我知道 C++,我的意图是用 C++ 构建编译器?你有什么建议哪一个更灵活更好的 C 或 C++?
  • @user4581301 感谢您提供的信息。
  • 关于您的主要问题和简短回答:机器代码只是字节值序列,因此您只需生成指令编码和数据值流,并将其包装到一些可执行文件/目标文件头中,所以其他工具或操作系统会识别它。如何生成正确的目标机器指令以重新创建以您的高级语言指定的功能是 IT 中的一门完整的子科学,并且可能会为 1000 多页的答案提供帮助。此外,您可能需要考虑不翻译成机器代码,而是 C++,这样您的语言将是可移植的,然后再加上 C++ 优化的好处。

标签: c++ assembly linker programming-languages machine-code


【解决方案1】:

你的问题非常模糊。

建议:

关注问题的一个方面。研究其他人如何实现“编程语言”。例如,下载并试用这个用 C++ 编写的小型、简单的 BASIC 解释器:

或在此处下载并研究任何(或多个)其他示例:

https://sites.google.com/site/smallbasicinterpreters/source-code

祝你好运!

【讨论】:

  • 如果您的意图是“实现一种语言”,请不要将自己局限于“编译器”。这涉及(至少)两个额外的工作:生成合理的汇编代码,并需要“链接器”。我强烈建议您使用现有的实现——比如上面的 BASIC 解释器之一。另一个资源:Let's Build a Compiler
【解决方案2】:

我只能就这个主题提供一些有限的指导,因为我不熟悉 Mathematica 如何在内部工作以解析或计算符号表达式的答案。我相信我以前遇到过一些关于这个主题的书(计算机代数系统),但我忘记了书名。一般来说,这本身就是一个主题,它与将语言编译为机器代码相比有点偏离,因为我相信结果是由所述系统解释的。

话虽如此,但是对于一般的计算机语言,你会得到一本关于编译器理论的书——比如

Aho/Sethi/Ullman/Lam 的编译器原理技术和工具。

由 Cooper/Torczon 设计编译器

或类似的东西。这些书倾向于介绍编写解析前端并将文本转换为中间语言的基本原理,然后可以使用各种标准技术将其转换为机器代码。

希望对您有所帮助。

【讨论】:

  • 感谢您提供有关 Cooper/Torczon 设计编译器的信息,这很棒。抱歉,我无法为您的答案投票,因为我没有那么多声望点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-04
  • 1970-01-01
  • 2011-10-14
  • 2019-10-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多