Domanda

Sto testando un infisso-di-postfix-di-infisso converter e trovare un qualche tipo di incertezza.Ad esempio, un semplice infisso somma

1 + 2 + 3 + 4

può essere convertito in uno postfix

1 2 + 3 + 4 +

supponendo che gli operatori con la stessa precedenza non sono cumulabili.Se sono poi ricevo

1 2 3 4 + + +

D'altra parte, tutte le seguenti postfix espressioni possono essere convertiti per la somma iniziale

1 2 + 3 + 4 +
1 2 + 3 4 + +
1 2 3 4 + + +

Sono, queste, postfix espressioni è corretta?

AGGIORNARE 1

Se vuoi fare una tale convertitore, di quale scegliereste?Ho bisogno di scegliere uno per il test.

È stato utile?

Soluzione

È necessario definire un vincolo in più.

Matematicamente, le espressioni postfisse sono tutti uguali. Ma su un aggiunta del computer intero in realtà non è commutativa a causa del troppo pieno.

Sostituire 1 2 3 4 con una b c d e considerare la possibilità di troppopieno. La maggior parte dei linguaggi di programmazione definiscono che a + b + c + d devono essere valutati da sinistra a destra in modo che a b + c + d + è la traduzione unica corretta.

Solo quando si definisce che l'ordine di valutazione è tutte le versioni 'non specificati' postfix sono equivalenti. Questo è stato il caso per (vecchi) compilatori C.

Altri suggerimenti

Sì, tutti corretti. Essi corrispondono alle seguenti espressioni infisse tra parentesi:

((1 + 2) + 3) + 4
(1 + 2) + (3 + 4)
1 + (2 + (3 + 4))

+ è confuso, è commutativa, quindi, in realtà, ogni risultato sembra corretto.

Prendere in considerazione la sostituzione + con altri operatori: 1 a 2 b 3 c 4.
Il risultato corretto qui, per associatività da sinistra a destra operatori, è

1 2 a 3 b 4 c

Quindi, nel tuo caso, mi sarei aspettato 1 2 + 3 + 4 +

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top