Я ищу способ реализовать программу чтения S-выражений (которая будет использоваться позже и с интерпретатором Scheme, и с компилятором), но я спрашиваю себя, как (если вообще нужно) писать AST за это.
Я читал SICP, и это довольно просто изнутри Scheme, но я собираюсь реализовать интерпретатор и компилятор в C ++, в форме OO.
Пожалуйста, имейте в виду, что я делаю это только для учебных целей, поэтому я не ищу самый простой или быстрый способ сделать это, а скорее правильный и многократно используемый способ сделать это.
Я видел в некоторых реализациях Scheme, что люди анализируют s-выражения и легко выводят cons-ячейки, что-то вроде этого:
struct Sexpr
{
};
struct Cons : public Sexpr
{
Sexpr* left;
Sexpr* right;
};
struct IntAtom : Sexpr
{
int value;
};
И один подкласс Sexpr для каждого вида Схемы Atom
, или что-то в этом роде.
Я не уверен, но мне это кажется хаком ... Разве эта работа не должна выполняться переводчиком, а не читателем?
Что я хочу знать, так это то, считается ли это лучшим (или правильным) способом чтения S-выражений, или это скорее работа интерпретатора, чем анализатора? Должен ли синтаксический анализатор иметь свой собственный AST вместо использования cons-ячеек?