Compito esame senza alberi

Si vogliono realizzare delle classi per rappresentare un semplice linguaggio di programmazione in cui esistono solo variabili, istruzioni di stampa, sequenze di istruzioni di stampa e condizionali fra istruzioni di stampa. Un programma in questo linguaggio è composto da una istruzione. Ogni istruzione può però essere composto da una singola istruzione di stampa, da una sequenza di istruzioni di stampa, oppure da un condizionale fra istruzioni di stampa.

Si realizzino le classi che rappresentano le variabili e le istruzioni. Si noti che viene richiesta una sola classe per la variabili, mentre deve esistere una classe per l'istruzione genererica e tre per le istruzioni specifiche.

variabile
un oggetto variabile è caratterizzato da una stringa (il nome della variabile)
istruzione
una istruzione può essere esclusivamente di uno dei seguenti tre tipi:
istruzioneStampa
una istruzione di stampa è caratterizzata da una stringa, che è la stringa che viene stampata quando si "esegue" una istruzione (vedi sotto);
istruzioneSequenza
una istruzioneSequenza è una sequenza di istruzioni di stampa
istruzioneIf
questa istruzione è composta da una variabile a da due istruzioni di stampa

Oggetti di queste classi rappresentano sintatticamente dei programmi scritti in un linguaggio di programmazione in cui esistono solo variabili, istruzioni di stampa, sequenze di istruzioni e condizionali. La stampa di un tale programma si può effettuare a partire da questi oggetti in questo modo:

OggettoCosa stampare
variabile si stampa la stringa che rappresenta il nome della variabile
istruzione di stampa si stampa print(stringa), dove la stringa è quella che si trova nell'oggetto che rappresenta l'istruzione
istruzione condizionale si stampa if(var,istr,istr) dove var è l'oggetto variabile e istr sono le due istruzioni che si trovano nell'oggetto
istruzione sequenza si stampa (istr,istr,...,istr), ossia si stampa la sequenza delle istruzioni precedute e seguite da parentesi e intervallate da virgole

Le classi devono essere incapsulate e avere i seguenti metodi:

Nei compiti d'esame esiste anche una seconda parte che in questa esercitazione è stata omessa
soluzione