你能给一个想写程序或脚本语言的人提供什么提示呢?我并不担心如何编程或设计编译器,而是如何使用工具和代码生成器快速开发编译器。
上一次尝试时,我用c++编写了它,状态和语法几乎与编写实际逻辑一样长。我知道下面的工具会有帮助。
我在想,我可以生成c++代码,让gcc来编译。使用上述工具,您估计编写程序或脚本语言需要多长时间?
关于这个问题的变化一直被反复询问,甚至可以追溯到学习编写编译器。关于这个话题的以下是SO资源的不完整列表。
发布于 2009-01-17 19:37:52
估计这样的事情可能需要多长时间取决于许多不同的因素。例如,一个有经验的程序员可以在几个小时内通过单元测试轻松地写出一个简单的算术表达式计算器。但是,新手程序员可能需要学习解析技术、递归下降、表达式树的抽象表示、树遍历策略等等。这很容易花上几个星期甚至更长的时间,仅仅是算术表达式。
不过,别让这让你气馁。正如Jeff和Joel在最近的堆栈溢出播客上与Eric讨论的那样,编写编译器是了解编程的许多不同方面的极好方法。我已经构建了一些编译器,它们是我最难忘的编程项目之一。
一些关于构建编译器的经典书籍是:
发布于 2009-01-17 22:34:39
大卫·汉森( Dave )曾与克里斯·弗雷泽( Chris )合作10年构建世界上最精心制作的编译器之一,他曾告诉我,他从这次经历中学到的主要东西之一是,不要尝试用C或C++编写编译器。
如果您想要快速开发一些东西,不要生成本机代码;目标是现有的虚拟机,如CLR、JVM或Lua虚拟机。使用最大munch生成代码。
如果要编写解释器,另一个很好的选择就是使用底层编程语言的内存管理和其他功能。解析到AST,然后通过AST的树遍历来解释。这会让你很快离开地面的。性能不是最好的,但它是可以接受的。(使用这种技术,我曾经用Modula-3编写了一个PostScript解释器。第一个实现花了一个星期的时间,虽然后来进行了一些性能优化,主要是在lexer中,但它从来没有被替换过。)
避免LALR解析器生成器;使用一些节省时间的东西,比如ANTLR或埃尔克温德 GLR解析器生成器。
发布于 2009-01-17 19:41:42
有关编译器设计的经典书籍有:
作者声明:Design of Compiler Design.它已经存在了很长一段时间了,它的粉红色骑士和绿色龙是众所周知的,至少有几代的CS学生。
还有..。
“编译器:原则、技术和工具”,阿尔弗雷德·V·阿霍、莫妮卡·S·拉姆、拉维·塞蒂、杰弗里·D·乌尔曼
如果您对编写编译器感兴趣,那么这些无疑是最好的起点。
https://stackoverflow.com/questions/453870
复制相似问题