Closed. This question needs to be more focused。它当前不接受答案。












想改善这个问题吗?更新问题,使其仅关注editing this post的一个问题。

3年前关闭。



Improve this question




我喜欢一些引用书或技巧,可能是一两本电子书。我不是要编写编译器,而是要寻找可以继续学习并随时进行修改的教程。感谢您的谅解!

顺便说一句:必须是C。

任何更多的答复将不胜感激。

最佳答案

开始编写解释器的一种好方法是编写一个简单的机器模拟器。您可以使用以下简单语言编写解释器:

该语言有一个堆栈和6条指令:
push <num>#将数字压入堆栈
pop# pop 堆栈中的第一个数字
add# pop 堆栈中的前2个项目,并将其总和 push 堆栈。 (请记住,您可以添加负数,因此也要减去)。您还可以在此循环中使用其他一些指令来创建循环。
ifeq <address>#检查栈顶,如果栈顶为0,则继续,否则,跳转到<address>,其中<address>是行号
jump <address>#跳转到行号
print#在栈顶打印值
dup#将堆栈顶部的内容推回堆栈。

一旦编写了可以接受这些指令并执行它们的程序,就可以创建一个非常简单的基于堆栈的虚拟机。由于这是一种非常低级的语言,因此您无需了解AST是什么,无需将语法解析为AST,并将其转换为机器代码,等等。对于教程项目而言,这太复杂了。从此开始,一旦创建了这个小型VM,就可以开始考虑如何将一些常见的构造转换到该计算机中。例如您可能需要考虑如何将C if / else语句或while循环转换为这种语言。

编辑:

从下面的注释中,您似乎需要更多的C经验,才能完成此任务。

我建议您首先了解以下主题:

  • scanf,printf,putchar,getchar-基本C IO函数
  • struct-C
  • 中的基本数据结构
  • malloc-如何分配内存,以及堆栈内存和堆内存之间的区别
  • 链表-以及如何实现堆栈,然后是二叉树(您需要
    首先了解结构体和malloc)

  • 那么最好也多了解一下string.h库
    -strcmp,strdup-几个有用的字符串函数,将很有用。

    简而言之,与python相比,C的学习曲线要​​高得多,仅因为它是一种较低级的语言,并且您必须管理自己的内存,因此在尝试编写解释器之前,最好先学习一些有关C的基本知识,如果您已经知道如何用python编写一个。

    关于c - 我将如何使用C编写解释器? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6887471/

    10-12 17:52
    查看更多