S式のリーダー(後でSchemeインタプリタとコンパイラの両方で使用する)を実装する方法を探していますが、私はASTを書くべきです)。OOPでS式を解析する正しい方法
私はSICPを読んできましたが、これはSchemeの中ではとても簡単ですが、私はOOの方法でC++でインタープリタとコンパイラを実装しようとしています。
私は学習目的でのみこれをやっているので、実際にこれを行うのが最も簡単で簡単な方法ではなく、正しいやり直しができる方法を探しています。
私は、人々がS式と容易に出力コンスセルを解析し、いくつかのSchemeの実装では、このような何かを見てきました:
struct Sexpr
{
};
struct Cons : public Sexpr
{
Sexpr* left;
Sexpr* right;
};
struct IntAtom : Sexpr
{
int value;
};
とScheme Atom
の種類ごとにSexprの1つのサブクラス、もしくは沿って何かをそれらの行。
私は確信していませんが、これは私にとってハックのようです...この作業は読者ではなく通訳者によって行われるべきではありませんか?
私が知りたいのは、これがS式を読み込む最良の(正しい)方法と考えられるのか、それともパーサー以外の通訳者の仕事なのでしょうか?パーサーはコンスセルに頼るのではなく、独自のASTを持つべきですか?
私がこの権利を読んでいれば、質問は解析とはあまり関係ありません。むしろ、私はあなたが尋ねていると思う:s-expressionデータ型の最も適切な表現は何か。同意しますか? – dyoo
@dyooはい、いいえ。はい、そうです、私はs式の最も適切な表現を探しています。そして、いいえ、あなたは間違っています。この質問は、明らかに解析する必要があります。私がsexprの最も適切な表現を探していただけの場合、コンスセルであることは間違いありません。しかし、私は具体的にsexprの最も適切な表現**を探しています**解析のため**。 – ivanmp
cool。良い説明。次に、解析作業を区別することの1つは、ソースの位置情報の必要性です。プレーンコンスセルは元のソースからどこに来たのかを覚えていません。解析中に、ソースを指す可能性のあるエラーメッセージをサポートすることができます。解析するために他に何が必要なのでしょうか? – dyoo