C++ 在C/C+中实现解释器所需的参考资料+;
我发现自己加入了一个将解释器集成到现有应用程序中的项目。要解释的语言是Lisp的派生语言,具有特定于应用程序的内置语言。单个“程序”将在应用程序中以批处理方式运行 我感到惊讶的是,这些年来我编写了两个编译器和几个数据语言翻译器/解析器,但我以前从未真正编写过解释器。该原型非常简单,在C++中实现为语法树Walk。我可能会影响原型之外的体系结构,但不会影响实现语言(C++)。因此,限制条件:C++ 在C/C+中实现解释器所需的参考资料+;,c++,lisp,interpreter,C++,Lisp,Interpreter,我发现自己加入了一个将解释器集成到现有应用程序中的项目。要解释的语言是Lisp的派生语言,具有特定于应用程序的内置语言。单个“程序”将在应用程序中以批处理方式运行 我感到惊讶的是,这些年来我编写了两个编译器和几个数据语言翻译器/解析器,但我以前从未真正编写过解释器。该原型非常简单,在C++中实现为语法树Walk。我可能会影响原型之外的体系结构,但不会影响实现语言(C++)。因此,限制条件: 实现将使用C语言++ 解析可能会使用yacc/bison语法(现在是) 对于这个项目来说,像NekoVM
- 实现将使用C语言++
- 解析可能会使用yacc/bison语法(现在是)
- 对于这个项目来说,像NekoVM和LLVM这样的完整VM/解释器生态的建议可能并不实用。自给自足更好,即使这听起来像NIH
- ,作者克里斯蒂安·奎内克。推荐它的人说,它“从简单的解释器发展到更先进的技术,并完成了字节码和“Scheme to C”编译器的演示。”
- 。正如我上面提到的,我怀疑是否允许我们合并一个完整的VM框架来支持这个项目
- 。起初,我认为这可能有些过分,但在处理了一个健康的块之后,我同意@JBF。信息量大,思维开阔
- 保罗·格雷厄姆。我读过这篇文章,虽然它是对Lisp原则的一个信息性介绍,但这还不足以快速构建一个解释器
- 。这本书看起来很有趣。我不确定它是否能为我提供基础知识
- 。Peter Michaux正在攻击Scheme的各种实现,从用C编写的快速而肮脏的Scheme解释器(在以后的项目中用作引导程序)到编译的Scheme代码。到目前为止非常有趣
- ,建议在的注释线程中使用。这本书有两章专门介绍如何构建口译员,因此我将其添加到我的阅读队列中
- 新的(也是旧的,即1979年):P.J.布朗著。这本书早已绝版,但在提供与基本解释器的实现相关的各种任务的概要方面很有意思。我已经看到了这一个混合评论,但因为它是便宜的(我有它的订单使用约3.50美元),我会给它一个旋转
- 当前的原型是一个解释器,这对我来说是有意义的,因为我们正在接受一个指向任意代码文件的路径,并在我们的应用程序环境中执行它。内置项用于影响内存中的数据表示
- 它不应该太慢。目前的树行者似乎可以接受
- 该语言基于Lisp,但不是Lisp,因此不需要符合标准
- 如上所述,我们不太可能被允许添加一个完整的外部VM/解释器项目来解决这个问题
- 它真的需要成为一个interpre吗
ConsBoxFactory &GetConsBoxFactory() { return mConsFactory; } AtomFactory &GetAtomFactory() { return mAtomFactory; } Environment &GetEnvironment() { return mEnvironment; } t_ConsBox *Read(iostream &stm); t_ConsBox *Eval(t_ConsBox *box); void Print(basic_ostream<char> &stm, t_ConsBox *box); void RunProgram(char *program); void RunProgram(iostream &stm);
t_ConsBox *ConsBoxFactory::Cadr(t_ConsBox *list) { return Car(Cdr(list)); }