Analisi lessicale
L'analisi lessicale è la conversione di un testo in una sequenza di token significativi (in senso semantico o sintattico) appartenenti a categorie definite da un programma apposito detto analizzatore lessicale o lexer. In caso di lingue naturali, queste categorie sono nomi, verbi o aggettivi, mentre in un linguaggio di programmazione sono identificatori, operatori, tipi di dato o simboli come parentesi.
La divisione in token lessicali è affine al tipo usato nei modelli linguistici grandi (LLM) ma con due differenze: mentre l'analisi lessicale si basa su una grammatica, l'analisi degli LLM è probabilistica. In più, quest'ultima effettua un secondo passaggio che converte i token in valori numerici.
Tipicamente l'analisi lessicale interviene nella parte di front end della compilazione e precede l'analisi sintattica.
Esempio
Ad esempio, dato in ingresso il seguente codice:
Programma Pippo intero i = 1; end Pippo
Il flusso di token prodotto sarà il seguente:
Tipo | Lessema (valore) |
---|---|
letterale | Programma
|
identificatore | Pippo
|
letterale | intero
|
identificatore | i
|
uguale | =
|
numero | 1
|
punto e virgola | ;
|
letterale | end
|
identificatore | Pippo
|
Da notare che alcuni token potrebbero fare a meno del valore (lessema) (ad esempio il simbolo equal), poiché già indicati dalla tipologia.
Lo strumento che si occupa dell'analisi lessicale è l'analizzatore lessicale, a volte chiamato scanner o lexer.
Bibliografia
- Compilers: Principles, Techniques, and Tools. Aho, Lam, Sethi, Ullman. Addison-Wesley, (2nd Edition) 2006. ISBN 0-321-48681-1