Adesso non venite a lamentarvi che questa non è matematica, ma informatica. Lo so benissimo, anche se dal mio punto di vista le differenze sono relativamente minori (ho dato esami di informatica a matematica, e viceversa). Però sono notoriamente pigro, la parte principale di questo testo l’ho buttata giù al volo perché mi è stata chiesta, e non vedo perché non riciclarmela in altro modo… senza contare che può anche servire per chi non è interessato né alla matematica né all’informatica. E poi, se dobbiamo dirla tutta, sintassi e semantica si usano anche in logica matematica, quindi non è che io sia così fuori tema!
Si sente spesso parlare di sintassi, semantica e grammatica di un linguaggio di programmazione. Se uno si ricorda ancora cosa faceva a scuola, i nomi – almeno grammatica, su… – non sono nuovi; e in effetti il loro significato deriva più o meno direttamente proprio da quello che usano i linguisti. Vediamo qual è il loro significato, partendo proprio da quello che hanno nelle lingue reali.
Partiamo dalla semantica. In linguistica, la semantica è lo studio del significato delle parole e delle frasi in una lingua; detto in parole povere, “che cosa vuol dire quello che c’è scritto?” Nei linguaggi di programmazione, capita esattamente lo stesso: la semantica di un algoritmo è quello che l’algoritmo fa… ammesso naturalmente che non ci siano dei bachi. Similmente, nella logica matematica la semantica è l’interpretazione di una formula. Per fare un esempio, se scrivo ∀x (∃y: y=x+1) la sua semantica è “per tutti gli x possiamo trovare un y che vale x+1”. Se vogliamo rimanere più terra terra, se scrivo 2+2=4 la sua semantica è “due più due è uguale a 4”.
La sintassi indica come bisogna scrivere la frase perché sia corretta; ad esempio scrivere “qual’è” è sintatticamente scorretto, mentre “qual è” è corretto. In un linguaggio di programmazione come il perl, una regola sintattica è ad esempio che le variabili devono iniziare con $, gli array con @ e gli hash con %, o che una componente di un array è $a[x] mentre una di un hash è $a{x}. La parte più importante da tenere a mente è che la sintassi è una convenzione: non c’è nessuna ragione teorica perché gli elementi degli array stanno tra quadre e quelli di un hash tra graffe, esattamente come non c’è nessuna ragione teorica perché in italiano si accentino solo le parole tronche e non anche le sdrucciole come ad esempio in spagnolo. Notate che la sintassi è facilmente riconoscibile anche da uno stupido com’è un calcolatore: se uno scrive un programma, può capitargli che gli compaia il messaggio di errore “syntax error”, ma non certo “semantic error”! Anche nella logica matematica, le formule sintatticamente corrette sono quelle che hanno un senso, anche se magari non sono vere. Ad esempio, tra i numeri interi la formula ∀x∈N (∃y∈N: y=x/2), che dice “per ogni numero intero ce n’è un altro pari alla sua metà”, è sintatticamente corretta ma falsa, visto che ad esempio 1/2 non è un intero. La formula ∀=x/N (y∈N: y∃x∈2) non vuol dire nulla, e quindi non è sintatticamente corretta.
La grammatica, infine, è l’insieme delle regole per comporre le frasi (soggetto – verbo – complementi…) , a partire dalle varie parti che la compongono e che hanno dei ruoli diversi (verbo, nome, preposizione…). Nei linguaggi di programmazione il concetto di grammatica è molto più specializzato, perché esiste un insieme di regole formali che permettono di generare tutti i programmi sintatticamente corretti, applicando man mano delle trasformazioni. Anche nella logica matematica ci sono queste regole formali, però stranamente non viene dato loro un nome specifico, almeno per quanto ne so.
Ricapitolando, la semantica dà il significato, la sintassi il modo corretto di scrivere, e la grammatica dà le regole per scrivere correttamente. Vista così, la cosa non è nemmeno troppo complicata; ma basta relativamente poco e arriva uno come Gödel a mischiare le cose (perché il Numero di Gödel usato nel suo teorema di incompletezza non è poi altro che un modo di trovare una formula il cui signficato semantico riprende la formula stessa, invece che essere al di fuori del sistema). Ma credo di avervi già perso, stavolta…
Ultimo aggiornamento: 2007-03-11 22:24