Autore Topic: Valutare espressioni  (Letto 2978 volte)

Offline TheKaneB

  • Human Debugger
  • *****
  • Post: 5292
  • Karma: +20/-23
    • Mostra profilo
    • http://www.antoniobarba.org
Re: Valutare espressioni
« Risposta #15 il: 19 ſettembre 2011, 14:54:52 »
In realtà l'albero serve per fare eventuali ottimizzazioni. Una volta ottimizzato/ridotto, l'albero viene attraversato dal code generator, che o sputa fuori direttamente il codice oppure prima lo trasforma in notazione RPN, che è appunto uno stack contenente simboli (letterali e variabili) e operatori.

Quindi lo stack, alla fine, ci dev'essere per forza. Nei compiler più elementari tale stack è direttamente implicito in una catena di funzioni ricorsive, per cui lo stack dei parametri delle chiamate ricorsive sostituisce la struttura Stack che dovresti esplicitamente creare in un sistema più elaborato.
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »

Offline clros

  • ASM Lover
  • *****
  • Post: 457
  • Karma: +3/-1
    • Mostra profilo
Re: Valutare espressioni
« Risposta #16 il: 19 ſettembre 2011, 15:06:07 »
Citazione da: "TheKaneB"
In realtà l'albero serve per fare eventuali ottimizzazioni. Una volta ottimizzato/ridotto, l'albero viene attraversato dal code generator, che o sputa fuori direttamente il codice oppure prima lo trasforma in notazione RPN, che è appunto uno stack contenente simboli (letterali e variabili) e operatori.


Uhmm scusa, credo di non aver capito molto...vuoi dire che una volta creato l'albero poi deve essere ottimizzato?
Cosa intendi per "sputa fuori il codice"?
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »
Claudio CP La Rosa

Offline TheKaneB

  • Human Debugger
  • *****
  • Post: 5292
  • Karma: +20/-23
    • Mostra profilo
    • http://www.antoniobarba.org
Re: Valutare espressioni
« Risposta #17 il: 19 ſettembre 2011, 15:14:12 »
1- Ottimizzazione: è facoltativa, lasciala perdere per ora.
2- Sputare fuori il codice: intendo che ad ogni passo di esplorazione dell'albero puoi direttamente dare in output una o più righe di codice assembly (quindi lo stack è implicito nella chiamata ricorsiva), oppure fare tale lavoro dopo averlo prima trasformato in un uno stack contenente operandi e operatori in notazione RPN
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »

Offline TheKaneB

  • Human Debugger
  • *****
  • Post: 5292
  • Karma: +20/-23
    • Mostra profilo
    • http://www.antoniobarba.org
Re: Valutare espressioni
« Risposta #18 il: 19 ſettembre 2011, 15:15:50 »
... mmmh, ah vero tu non stai facendo un compilatore :D

Nel tuo caso "Sputa fuori il codice" va sostituito con "calcoli i risultati parziali di ogni nodo, partendo dalle foglie e risalendo fino alla radice".
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »

Tags: