Analizzatore lessicale: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Prima bozza |
sistemo prosa |
||
| (38 versioni intermedie di 32 utenti non mostrate) | |||
Riga 1:
{{F|programmazione|febbraio 2013}}
Un '''analizzatore lessicale''' ({{Inglese|'''lexer'''}} o '''''scanner''''') è un programma che effettua l'[[analisi lessicale]] di un dato testo, generalmente il [[codice sorgente]] di un programma, producendo da esso una sequenza di ''[[Token (testo)|token]]''.
Il ''token'' è un elemento che ha un nome e un valore, tipicamente il [[lessema]] ma può trattarsi anche di un insieme di informazioni elementari come il tipo del numero o il punto del programma in cui è definito. I ''token'' costituiscono gli elementi base su cui andrà ad operare un [[analizzatore sintattico]].
== Funzionamento ==
L'individuazione di ''token'' all'interno di un flusso di caratteri è effettuata attraverso modelli, definiti attraverso delle [[espressioni regolari]]. I seguenti sono un esempio di questi modelli:
cifra = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0
numero = cifra cifra*
operatore = + | - | x | /
dove il simbolo <code>|</code> indica la [[disgiunzione logica]] OR, mentre l'asterisco indica che l'elemento che lo precede può essere ripetuto zero o più volte.
Il modello sopra specifica che una cifra è un numero da 1 a 0, mentre un numero è composto da una o più cifre; un operatore è invece il segno più, meno, per e diviso. Secondo questo modello, la stringa <code>123 + 141 / 725</code> produrrà la seguente sequenza di ''token'', trascurando gli spazi.
{|
! Tipo
! Lessema (valore)
|-
| numero
| 123
|-
| operatore
| +
|-
| numero
| 141
|-
| operatore
| /
|-
| numero
| 725
|}
Per effettuare questo lavoro gli analizzatori lessicali si basano su un [[automa a stati finiti deterministico]], strettamente collegati alle [[espressioni regolari]]. Si parte da uno stato iniziale, e ci si sposta negli altri stati in base al carattere in ingresso sino a quando non si raggiunge uno stato di accettazione nel quale si può inviare il ''token'' in
[[File:Automa di un analizzatore lessicale.png]]
Si inizia dallo
! Carattere
! Stato attuale
! Azione
|-
| 1
| 1
|-
| 2
| 2
|-
| 3
| 2
| Vai a stato (2)
|-
| +
| 2
| Vai a stato (3)
|-
| +
| 3
| Produci ''token'' di tipo Numero e valore 123
|-
| +
| 1
| Vai a stato (4)
|-
| +
| 4
| Produci ''token'' di tipo Operatore e valore +
|-
| 1
| 1
| Vai a stato (2)
|-
| 4
| 2
| Vai a stato (2)
|-
| 1
| 2
| Vai a stato (2)
|-
| /
| 2
| Vai a stato (3)
|-
| /
| 3
| Produci ''token'' di tipo Numero e valore 141
|}
e così via...
Un analizzatore lessicale può essere scritto a mano, ma questo comporterebbe un grosso impiego di tempo. In aiuto ai programmatori vengono strumenti di generazione automatica di lexer, quale ad esempio
==
*[[Analisi lessicale
*[[Analisi sintattica]]
*[[Compilatore]]
{{Portale|informatica}}
[[Categoria:Analisi lessicale]]
| |||