Metalinguaggio è una parola composta dai termini meta
e linguaggio. Il prefisso meta- deriva dal greco meta, significa
dopo, oltre ed ha dato
origine a molte parole. La più famosa è
metafisica che infatti vuol dire "ciò che è al di là della fisica". Il
titolo venne dato ai libri di Aristotele che seguivano il suo trattato sulla fisica.
Cioè prima scrisse testi sulla realtà fisica e poi sulle realtà che sono al
di là delle apparenze materiali. Dunque con metafisica noi
intendiamo argomenti superiori, di pura filosofia. Similmente
con
metamatematica intendiamo ciò che è più elevato rispetto
alla matematica e che è infatti la sua logica generale.
In informatica troviamo
le parole:
- metadati
= sono informazioni
che definiscono i dati. Ad esempio i descrittori degli archivi e dei
data base sono metadati.
- metalinguaggio =
è un linguaggio più elevato che infatti ne definisce un
altro.
Di solito un metalinguaggio
definisce i linguaggi di programmazione. Il più famoso è noto come Notazione di Backus-Naur
(BNF). I due,
l'americano John Backus e l’europeo Peter Naur, adattarono al
software un metalinguaggio ideato in precedenza da Noam Chomsky per la lingua inglese. Lo
illustriamo brevemente per far capire con un caso pratico i contenuti di un
metalinguaggio.
BNF si basa sui seguenti quattro simboli:
::=
|
che significa "viene definito come" |
| |
che separa elementi alternativi |
{} |
che vuol dire "è una sequenza di uno o più
elementi" |
[
] |
che vuol dire "concorrono uno o più elementi
riportati" |
Per chiarire il loro uso che appare assai strano a chi lo vede la prima volta,
imagginiamo di inventare un nuovo linguaggio di programmazione. Questo è infatti lo scopo
del metalinguaggio: preparare un linguaggio di programmazione. Nel nuovo linguaggio stabiliamo che l'identificatore
sia il nome di un campo, di una variabile ecc. il quale potrà contenere liberamente
lettere e cifre. Gli aggiungiamo però la restrizione che deve cominciare con una lettera.
Ad esempio il programmatore potrà chiamare una variabile A3 ma non 3A.
Poiché l'identificatore contiene cifre e lettere dobbiamo cominciare a definire queste.
Una cifra è 0 oppure 1, o 2, 3 .. 9 e dunque scriviamo:
cifra ::= |0|1|2|3|4|5|6|7|8|9|
La tabellina sopra riportate fa agevolmente interpretare questa riga che alla lettera vuol dire "cifra viene definita come 0 oppure 1
oppure 2 ecc". Poi stabiliamo che lettera sia una maiuscola
qualsiasi:
lettera ::= |A|B|C|D| ..... |W|Z|
Quindi imponiamo che identificatore abbia come primo simbolo
una lettera seguito da una sequenza di lettere oppure cifre:
identificatore ::= lettera
{lettera|cifra}
L'interpretazione di questa riga è semplice usando quanto abbiamo spiegato sopra.
In
conclusione la metaprogrammazione dell'identificatore comprende le tre righe (in bianco)
sopra riportate.
Con lo stesso metodo si prosegue per progettare tutte le parti del nuovo linguaggio dalle
più semplici, come appunto cifra e lettera, alle più complesse come una
macro-istruzione.
anno 2002 |