Closed. This question needs to be more focused。它当前不接受答案。
想改善这个问题吗?更新问题,使其仅关注editing this post的一个问题。
3年前关闭。
Improve this question
我喜欢一些引用书或技巧,可能是一两本电子书。我不是要编写编译器,而是要寻找可以继续学习并随时进行修改的教程。感谢您的谅解!
顺便说一句:必须是C。
任何更多的答复将不胜感激。 scanf,printf,putchar,getchar-基本C IO函数 struct-C 中的基本数据结构 malloc-如何分配内存,以及堆栈内存和堆内存之间的区别 链表-以及如何实现堆栈,然后是二叉树(您需要
首先了解结构体和malloc)
那么最好也多了解一下string.h库
-strcmp,strdup-几个有用的字符串函数,将很有用。
简而言之,与python相比,C的学习曲线要高得多,仅因为它是一种较低级的语言,并且您必须管理自己的内存,因此在尝试编写解释器之前,最好先学习一些有关C的基本知识,如果您已经知道如何用python编写一个。
想改善这个问题吗?更新问题,使其仅关注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经验,才能完成此任务。
我建议您首先了解以下主题:
首先了解结构体和malloc)
那么最好也多了解一下string.h库
-strcmp,strdup-几个有用的字符串函数,将很有用。
简而言之,与python相比,C的学习曲线要高得多,仅因为它是一种较低级的语言,并且您必须管理自己的内存,因此在尝试编写解释器之前,最好先学习一些有关C的基本知识,如果您已经知道如何用python编写一个。
关于c - 我将如何使用C编写解释器? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6887471/