perché usare l'espressione postfisso / prefisso invece di infisso?

2

Capisco come convertire infix in postfix / prefisso ma non capisco perché l'espressione postfisso o prefisso sia usata nel sistema informatico?

Qual è il vantaggio del prefisso postfix rispetto all'espressione infissa?

    
posta Joydip Ghosh 29.08.2015 - 20:46
fonte

2 risposte

8

Sia pre- e postfix hanno sostanzialmente gli stessi vantaggi rispetto alla notazione infissa. I più importanti di questi sono:

  • molto più facile da tradurre in un formato adatto per l'esecuzione diretta. Entrambi i formati possono essere trasformati banalmente in un albero per ulteriori elaborazioni e postfix può essere tradotto direttamente in codice se si utilizza un processore basato su stack o una macchina virtuale

  • completamente non ambiguo. La notazione infissa richiede le regole di precedenza e di associatività per disambiguarla o l'aggiunta di parentesi aggiuntive che di solito non sono considerate parte della notazione. Finché il numero di argomenti per ciascun operatore è noto in anticipo, sia la notazione prefisso sia quella postfissa sono completamente non ambigue: "* + 5 6 3" è (5 + 6) * 3 e non può essere interpretato come 5+ (6 * 3), mentre è richiesta la parentesi per ottenere con infisso.

  • supporta operatori con diversi numeri di argomenti senza variazioni di sintassi. "unary-op 5" e "ternary-op 1 2 3" funzionano bene, ma richiedono una sintassi speciale per farli funzionare in infisso.

risposta data 29.08.2015 - 22:53
fonte
2

Si noti che le LISP lingue (ad esempio Common Lisp , Schema , Clojure e molti dialetti specifici ispirati da loro come AutoLISP , Emacs-LISP , MELT , ecc ...) utilizzano tutti una sintassi di prefisso: l'espressione ogni inizia con una parentesi sinistra, quindi l'operatore, quindi gli operandi, quindi la parentesi destra. Queste espressioni sono chiamate S-expressions . Ad esempio 1 + 2 * 3 è digitato come (+ 1 (* 2 3)) e non è necessario per precedenza degli operatori .

I vantaggi di una sintassi così semplice (probabilmente la più semplice possibile per AST s, al di fuori dei linguaggi di stack alla Avanti) includono:

  • regola sintassi facile da ricordare per gli sviluppatori umani
  • facile e veloce da analizzare per le implementazioni linguistiche
  • facile da emettere quando si genera codice in espressioni S (da qualche rappresentazione AST)
  • capacità di rendere facilmente omoiconico lingue sopra di loro
  • capacità di gestire molti operandi (ad esempio operatori o funzioni variadici o funzioni con molti argomenti formali)
  • semplice da leggere, una volta che puoi abbinare una parentesi chiusa con quella giusta

Lo svantaggio di tale sintassi è un gioco di parole sul linguaggio: Un sacco di Insipid Stupid Parenthesis . Comunque (credici o no) qualsiasi codificatore Lisp non vede la parentesi come aggressiva, e usa l'abilità (fornita da un buon editor) per far corrispondere le parentesi quando legge il codice sullo schermo.

A proposito, ciò che è importante non è convertire la rappresentazione testuale da, ad es. infisso al prefisso, ma per analizzare espressioni in AST (abstract syntax trees). Molto spesso, un AST è una struttura ad albero simile in memoria, mantenendo più informazioni che la semplice forma sintattica (ad esempio, la posizione di origine, come nome di file, numero di riga, numero di colonna o alcune informazioni sul tipo, ecc ...).

    
risposta data 30.08.2015 - 07:29
fonte

Leggi altre domande sui tag