AST mutevole rispetto a AST immutabili diversi

6

Sto scrivendo un compilatore di giocattoli. Durante i passaggi semantici, voglio aggiungere informazioni all'AST. Quale dei seguenti è l'approccio migliore?

  • Definisci 1 tipo AST mutevole i cui campi sono aggiornati con ciascun passaggio
  • Definisci più AST immutabili, ognuno dei quali è un input e output di un passaggio semantico
  • Un mix di entrambi?
posta kvu787 18.08.2015 - 18:12
fonte

2 risposte

2

Dipende dalle informazioni che vuoi aggiungere, se il tuo AST è autonomo bene, quanti passaggi farai dove modifichi l'AST, e una manciata di altre condizioni che potrebbero o meno importare per te.

In generale, proverei a evitare di modificare l'AST. Questo può facilmente farti entrare nella situazione in cui il tuo codice deve iniziare a preoccuparsi di quale sia lo stato dell'AST (le informazioni aggiunte sono mancanti o non sono state ancora aggiunte?). Quel tipo di accoppiamento temporale è fastidioso in qualsiasi software, insieme ai soliti problemi che accompagnano lo stato mutevole.

    
risposta data 18.08.2015 - 18:53
fonte
2

Gli alberi di sintassi dovrebbero essere immutabili. Altrimenti, sono chiaramente una bugia.

L'albero della sintassi rappresenta l'input sintattico dell'utente, quindi, a meno che non si intenda modificare il testo del codice sorgente, è un non-iniziatore completo per mutare l'albero.

Se i passaggi semantici devono lavorare con un albero, hanno bisogno del loro albero semantico. Riutilizzare arbitrariamente un albero completamente diverso che ha uno scopo completamente diverso e un significato fondamentale è un cattivo piano.

Gli alberi semantici non sono comunque alberi, è banale produrre programmi con ad es. funzioni ricorsive che sono grafici, mentre gli alberi di sintassi sono in realtà alberi.

    
risposta data 18.08.2015 - 20:02
fonte

Leggi altre domande sui tag