我正在开发一个小型Unix,并且正在考虑编写脚本解释器的想法。在阅读这个主题时,我不可避免地听说过函数式编程、lambda微积分,并了解了Lisp的全部魅力所在。
在我开始之前,我有一些问题要问。
我对函数式编程很好奇,所以这将是一个很好的开始机会。我希望我的shell有尽可能少的第三方依赖关系。我想知道我是否应该寻找一种汇编语言。我希望能够更容易地分发它。这方法正确吗?如果是,你会推荐哪种语言?
在我看来,它是让解释器在第二个单独的进程中运行。据我所知,两个通信过程,要么是监听管道,要么是相互发送信号。这是一种现实的做法吗?是否有一种特殊的语言来处理这个部分?还有其他方法嵌入解释器吗?
发布于 2011-09-27 14:25:55
您可能应该使用ANSI C。它在所有平台上都是通用的。它是低级别的,在所有平台上都有系统级的接口,这是脚本、运行时或编程语言所需要的。
要编写脚本解释器,我建议先阅读“龙书1”。这是相当重的数学,但基本的是很容易学会。如果您对LISP/ read感兴趣,请阅读SICP 2。两本书都在两种不同的语境中对解释和编纂进行了深入的描述。如果你对编程语言感兴趣,SICP会改变你的生活。
关于嵌入,您的脚本解释器应该有一个"eval“函数,它在您的语言中接受一个字符串,执行它并返回一个结果。这是嵌入所需的唯一入口点。
UNIX/Linux/OSX为您做所有的通信工作,使用管道等。只需专注于与stdin和stdout对话的内容,您就会得到排序。甚至在Windows上工作(主要是)。
开始很简单。这非常简单,您需要启动(3.)。它用C实现了一个完整的LISP解释器,代码很少。
发布于 2011-09-28 10:16:08
你可能想要获得P.J. Brown的一本“写作交互式编译器和解释器”,现在被认为是该领域的经典(1982年出版)。新的拷贝很昂贵,但是你可以以5美元以下的价格挑选一份旧的拷贝。
另一本关于同一主题的书是罗纳德·麦晋桁( Ronald )于2009年出版的编写编译器和解释器:一种软件工程方法。
https://softwareengineering.stackexchange.com/questions/111358
复制