Programmazione stack-orientedLa programmazione stack-oriented (letteralmente "orientata alla pila"), o stack-based ("basata su pila") è un paradigma di programmazione che basa il suo funzionamento su una macchina a stack (stack machine) a cui passare i parametri. Diversi linguaggi seguono questo paradigma, fra i più noti Forth, RPL, PostScript, e vari linguaggi assembly (di livello meno astratto). I linguaggi stack-oriented operano su una o più pile (stack), ciascuna delle quali possono avere scopi diversi. Per cui, gran parte dei costrutti di programmazione che possono essere usati in altri linguaggi devono essere modificati per poter funzionare in un sistema a pila. Inoltre, alcuni linguaggi stack-oriented operano in notazione polacca inversa (o postfissa), ovvero, ogni argomento o parametro per un comando viene espresso prima del comando stesso. Per esempio, in notazione postfissa si scriverebbe Teoricamente l'interpretazione dei programmi scritti secondo il paradigma stack-based è più veloce rispetto a quelli scritti secondo modelli più classici, in quanto non dev'essere eseguita un'analisi sintattica, ma solo lessicale. Algoritmi stack-basedConsideriamo un linguaggio stack-based in notazione postfissa, come PostScript. Per capire il funzionamento di un sistema a pila, consideriamo un'espressione matematica come Dapprima verrà preso Nel caso di calcoli più complessi, come
La programmazione basata su stack funziona quindi prelevando un determinato numero di valori dalla cima alla pila (pop) per poterli processare e riaggiungere il risultato in cima allo stack (push). Manipolazione dello stackGeneralmente, i linguaggi di programmazione basati su pila forniscono metodi per manipolare la pila stessa. Fra i più comuni, Per mostrare gli effetti di un operatore, può essere usato un commento. La notazione seguente è usata solitamente in Forth, dove i commenti sono inseriti fra parentesi. ( prima -- dopo )
Per esempio, gli operatori basilari del Forth sono descritti come segue: dup ( a -- a a )
drop ( a -- )
swap ( a b -- b a )
over ( a b -- a b a )
rot ( a b c -- b c a )
E la funzione fib ( n -- n' )
Note
Voci correlate |