S式リーダーを実装する方法を探しています(後でSchemeインタープリターとコンパイラーの両方で使用されます)が、ASTをどのように記述すればよいか(もしあったとしても)自問自答しています。
私は SICP を読んできました。これは、Scheme 内からは非常に簡単ですが、インタープリターとコンパイラーを C++ でオブジェクト指向の方法で実装しようとしています。
私は学習目的でのみこれを行っていることに注意してください。そのため、これを行う最も簡単で迅速な方法を実際に探しているのではなく、正しく再利用可能な方法を探しています。
いくつかの Scheme 実装で、人々が s 式を解析して、次のようなコンス セルを簡単に出力するのを見てきました。
struct Sexpr
{
};
struct Cons : public Sexpr
{
Sexpr* left;
Sexpr* right;
};
struct IntAtom : Sexpr
{
int value;
};
そして、Scheme の種類ごとに 1 つの Sexpr のサブクラスAtom
、またはそれらに沿った何か。
よくわかりませんが、これはハックのように思えます... この作業は、読者ではなく通訳者が行うべきではありませんか?
私が知りたいのは、これが S 式を読む最良の (または正しい) 方法であると考えられるか、それともパーサーよりもインタープリターの仕事ですか? パーサーは、コンス セルに依存するのではなく、独自の AST を持つ必要がありますか?