Sto cercando un modo per implementare un lettore di espressioni S (da utilizzare in seguito con un interprete Scheme e un compilatore), ma mi sono chiesto come (se non del tutto) dovrei scrivere un AST per questo.Modo corretto di analizzare le espressioni S in OOP
Ho letto SICP e questo è abbastanza semplice da Scheme, ma sto cercando di implementare l'interprete e il compilatore in C++, in modo OO.
Per favore, tieni presente che lo sto facendo solo a scopo di apprendimento, quindi non sto davvero cercando il modo più semplice o più veloce per farlo, ma piuttosto il modo corretto e riusabile di farlo.
che ho visto in alcune implementazioni Schema che le persone analizzano s-espressioni e le celle cons prontamente uscita, qualcosa di simile:
struct Sexpr
{
};
struct Cons : public Sexpr
{
Sexpr* left;
Sexpr* right;
};
struct IntAtom : Sexpr
{
int value;
};
E una sottoclasse di sEspr per ogni tipo di regime Atom
, o qualcosa del genere quelle linee.
Non sono sicuro, ma questo mi sembra un trucco ... Non dovrebbe questo lavoro essere eseguito da un interprete piuttosto che dal lettore?
Quello che voglio sapere è se questo è considerato il modo migliore (o corretto) di leggere le S-espressioni, o è più un lavoro dell'interprete che del parser? Il parser dovrebbe avere il proprio AST invece di fare affidamento sulle celle contro?
Se sto leggendo bene, la domanda non ha molto a che fare con l'analisi. Piuttosto, penso che tu stia chiedendo: qual è la rappresentazione più appropriata per il tipo di dati di espressione s. Sei d'accordo? – dyoo
@dyoo Sì e no. Sì, hai ragione, sto cercando la rappresentazione più appropriata per le espressioni s. E no, ti sbagli, questa domanda ovviamente ha a che fare con l'analisi. Se fossi solo alla ricerca della rappresentazione più appropriata per sexpr, non ci sarebbero dubbi sul fatto che sarebbero state le cellule. Tuttavia, sto cercando la rappresentazione più appropriata di sexpr in particolare ** per l'analisi **. – ivanmp
cool. Buon chiarimento Quindi: una cosa che potrebbe distinguere il compito di analisi è la necessità di informazioni sulla posizione della fonte. Le cellule normali non ricordano da dove provenissero nella fonte originale. Durante l'analisi, è possibile che si desideri supportare i messaggi di errore che possono puntare all'origine. Quali altre cose potremmo aver bisogno di analizzare? – dyoo