Vi è in realtà molta somiglianza tra i tipi per la sintassi abstact e tipi come di solito capito. Ma i tipi sono un concetto sintattico formale e anche gli alberi AS sono sintassi, mentre i tipi sono un concetto semantico .
La terminologia deriva dal termine algebre (chiamate anche algebre libere ) e algebra universale . Queste sono essenzialmente teorie sintattiche delle strutture algebriche, analizzate indipendentemente da qualsiasi interpretazione. Sono stati sviluppati nella prima metà del 20 ° secolo.
Un termine può essere visto come un albero, in cui i nodi sono etichettati da un insieme finito di operatori, ogni operatore ha un'arità fissa che specifica il numero di figlie nell'albero. Arity 0 è per le foglie. Nelle algebre multi-ordinate, questo viene perfezionato con ordinamenti, in modo che ogni operatore appartenga a un ordinamento e le arità vengano sostituite da un elenco ordinato di ordinamenti, che fissa per ogni figlia il tipo del suo operatore principale. Il tipo di operatore, insieme all'elenco dei tipi di sua figlia, è chiamato la firma dell'operatore.
Nelle algebre universali, ciò viene ulteriormente perfezionato introducendo relazioni di equivalenza definite equazionalmente tra i termini.
Sebbene sembri essersi un po 'sbiadito, questi concetti erano piuttosto popolari e molto studiati nell'informatica alla fine del 20 ° secolo, come algebre astratte dove poi sono state viste come base per tipi di dati astratti, che è, in parte, precursore di ciò che è nos classi nella programmazione orientata agli oggetti.
Le algebre universali sono legate allo sviluppo della teoria delle categorie, che è anche fondamentale nella visione attuale di tipi e linguaggi di programmazione.
Le algebre sono oggetti sintattici e devono essere utilizzate con un'interpretazione in alcuni domini semantici corrispondenti a tipi. Un'interpretazione è un omomorfismo che mappa gli ordinamenti in domini di valori (tipi) e operatori in funzioni tra tali domini, in modo che le firme vengano rispettate e anche le equazioni nel caso di un'algebra equazionale. È così che puoi applicare i risultati della teoria dei gruppi a qualsiasi dominio con un'operazione che rispetti la definizione di un gruppo.
Questa organizzazione è stata considerata molto conveniente dai primi ricercatori nei linguaggi di programmazione, in particolare quelli che si occupano di formalizzare i linguaggi di programmazione. Aveva il vantaggio di isolare la sintassi e la semantica e di essere matematicamente ben compreso.
Un altro motivo per adottarlo era una preoccupazione per lo sviluppo di strumenti per manipolare i programmi, sia in ambienti di sviluppo che in sistemi formali per dimostrare le proprietà dei programmi (che si sono rivelati sempre più problemi gemelli).
Ciò ha portato alla nascita del concetto di albero di sintassi astratto (AST) per i linguaggi di programmazione, che sono essenzialmente termini di un'algebra multi-ordinata (a volte perfezionata con l'uso dell'unione di ordinamento in alcuni sistemi). L'AST è la sintassi di riferimento per una lingua, dalla quale la semantica può essere definita dall'omomorfismo come nella semantica denotazionale.
Non solo è conveniente studiare la semantica delle lingue, ma gli alberi sono strutturati meglio delle stringhe e quindi una base migliore per lo sviluppo di strumenti di programmazione e ambienti di programmazione.
Permette di isolare l'analisi che era tradizionalmente una parte disordinata poiché i limiti della tecnologia di analisi costringevano l'uso di grammatiche distorte. Inoltre risolve i problemi di presentazione.
Permette molteplici rappresentazioni concrete (stringhe o grafiche) di programmi, che a volte possono essere utili (non vi è alcun motivo per cui l'uso della punteggiatura piuttosto che delle schede, o viceversa, nella sintassi del programma debba essere forzato sulle persone).
Rende facile definire molte interpretazioni di programmi e di sorta , al fine di analizzare le proprietà del programma con interpretazioni astratte.
È utile per scrivere strumenti di manipolazione dei programmi (semi) automatizzati, ad esempio per trasformazioni di programmi automatiche o traduzioni tra lingue.
Le cose a volte possono essere un po 'più complicate nella pratica, perché alcune forme di sintassi astratta consentono ad alcuni operatori di costruire alberi (espressioni) che appartengono a diversi tipi (un modo informale di vederlo). Ad esempio potrebbe esserci un ordinamento per costrutti sintattici che rappresentano variabili (entità assegnabili) e un altro per espressioni. Ma ogni variabile può essere usata come espressione, il contrario è falso.
I primi articoli su questo, per i linguaggi di programmazione, risalgono alla metà degli anni settanta. La concettualizzazione all'epoca era intesa per la produzione di ambienti di programmazione consapevoli della sintassi (la parola "diretta" veniva quindi usata). Cerca Mentor e Centaur in Europa e Cornell Program Synthesizer negli Stati Uniti. Furono i primi due sistemi a utilizzare effettivamente tali concetti in modo pratico. Molti altri furono sviluppati successivamente.
Ma la sintassi astratta precede questi sistemi. Il linguaggio Lisp (1958) aveva una sintassi astratta, che non sorprende in quanto è stato sviluppato da un logico e allo scopo di creare programmi che manipolano i programmi (vedi anche ML e LCF ... che sono arrivati dopo). Ma Lisp non era ordinato: tutto era sintatticamente un elenco e una struttura più raffinata dipendeva essenzialmente dalla semantica. Ciò ha portato alcune persone a ritenere, in qualche modo errato, che Lisp non avesse sintassi.