【问题标题】:How to develop compiler without compiler writing tools如何在没有编译器编写工具的情况下开发编译器
【发布时间】:2017-12-07 00:23:49
【问题描述】:

我的老师提出了这个问题(如何在没有编译器编写工具的情况下开发编译器)。我搜索了它,但我没有找到任何东西。所以,如果有人对此有任何想法,请帮助我。找到了很多关于使用编写工具开发编译器的资料,但是在没有编译器编写工具的情况下搜索时却一无所获。

提前谢谢你。

【问题讨论】:

  • 这是题外话,但我想说“龙书”,但后来found this post
  • 你总是可以使用机器码
  • @close-voters 这怎么“太宽泛”了?请解释。非常简单的问题,非常简单且众所周知的答案。
  • @KenY-N 您链接到的帖子很荒谬。本书为标准教材。还有其他的,但正如一位受访者所说,创建一个元帖子来试图审查这个是完全奇怪的。
  • 天啊,还有两个无法解释的接近投票。如果您对编译器一无所知,请不要参与其中,如果您知道并且仍然想近距离投票,请提供您的推理。

标签: compiler-construction


【解决方案1】:

与:

  1. 手写扫描仪(大号switch 声明),以及
  2. 递归下降解析器。

【讨论】:

  • 使用这两种方法的优缺点是什么?
  • @GhezlanAL-Nofly 使用 lex/yacc 等工具的优势在于它简化了词法分析和解析阶段的编写,并且您可以快速上手。缺点是很难从生成的解析器中得到合理的错误报告。在解析器生成器使用的形式模型中表达源语言的语法也可能存在问题。一个非常简单的观点是,解析器生成器最适合用于自制工具中的简单领域特定语言,而完整编程语言的编译器通常具有手写解析器。
  • @Ghezian 现在你太宽泛了。除了不需要生成器工具之外,没有什么特别的优势,缺点是您必须编写数英里的代码,而不是让生成器为您编写代码,并且保证正确性。
【解决方案2】:

编译器基本上是一个过滤器/转换器。它读取文本文件并输出恰好与给定 CPU 理解的指令相同的数据。

所以你需要找出:

  • 源语言的命令相当于什么汇编代码
  • 这些汇编程序命令中的每一个都等效于什么字节序列

然后就可以读取源文件,输出编译后的代码了。

【讨论】:

  • 如果投反对票的人能解释原因,我将不胜感激?
  • 当然。 1. 编译器基本上由 NFA 或 DFA 加上 DPDA 加上语义检查和动作加上代码生成和优化组成。 2. 没有'happens to be'。这就是编译器的for。 3. 这个华夫饼里没有任何东西可以以任何方式回答这个问题,或者泄露对这个话题的最浅理解。
  • 这是一个有趣的假设,因为到目前为止我已经编写了几种编程语言和编译器。考虑到我可能试图将答案简化为初学者可能理解和熟悉的概念。
  • 这不是假设,而是事实。无论您对该过程的理解是什么,它都不会反映在这个答案中,它不会以任何方式解决所提出的问题。他在问如何在没有扫描仪和解析器生成器的情况下编写编译器。不是为了一些毫无意义的华夫饼。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-11
  • 2019-02-09
  • 2011-10-02
  • 2012-06-05
  • 2015-09-24
  • 2018-09-03
  • 2020-03-25
相关资源
最近更新 更多