我正在寻找一种实现 S 表达式阅读器的方法(稍后将与 Scheme 解释器和编译器一起使用),但我一直在问自己(如果有的话)我应该如何(如果有的话)为它编写一个 AST。
我一直在阅读 SICP,这在 Scheme 中非常简单,但我希望以 OO 方式在 C++ 中实现解释器和编译器。
请记住,我这样做只是为了学习目的,所以我并不是在寻找最简单或最快的方法,而是寻找正确且可重用的方法。
我在一些 Scheme 实现中看到人们解析 s 表达式并轻松输出 cons 单元格,如下所示:
struct Sexpr
{
};
struct Cons : public Sexpr
{
Sexpr* left;
Sexpr* right;
};
struct IntAtom : Sexpr
{
int value;
};
每种 Scheme 都有一个 Sexpr 子类Atom
,或者类似的东西。
我不确定,但这对我来说似乎是一种黑客行为......这项工作不应该由口译员而不是读者来完成吗?
我想知道的是,这是否被认为是阅读 S 表达式的最佳(或正确)方式,或者这更像是解释器而不是解析器的工作?解析器是否应该拥有自己的 AST 而不是依赖于 cons 单元?