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?
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?
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.
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:
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 ...).