title: Token (testo)
text: # Token (testo)
  
  Un token (o token lessicale), in informatica, è un blocco di testo categorizzato, normalmente costituito da caratteri indivisibili chiamati lessemi.
  
  I token sono frequentemente definiti come espressioni regolari, che sono comprese da un analizzatore lessicale come Lex. L'analizzatore lessicale legge in un flusso di lessemi e li categorizza in token: se esso trova un token non valido, restituisce un errore. L'operazione successiva alla tokenizzazione è il parsing. Con essa i dati interpretati possono essere caricati in strutture dati, per uso generico, interpretazione o compilazione.
  
  ## Descrizione
  
  Un analizzatore lessicale inizialmente legge i lessemi e li suddivide in categorie a seconda della loro funzione, dando loro un significato. Questa assegnazione di significato è chiamata tokenizzazione (o analisi lessicale). Un token può appartenere a un qualsiasi linguaggio: deve però avere una qualche utilità in un testo strutturato. Inoltre, bisogna tener presente che, nella programmazione, il codice sorgente si può suddividere in 5 classi di token (costanti, identificatori, operatori, parole riservate e separatori), in accordo con le regole del linguaggio di programmazione scelto.
  
  Si consideri, ad esempio, la suddivisione in token del testo somma=(3+2); :
  
  | lessema | token |
  | - | - |
  | somma | IDENTIFICATORE |
  | = | OP_ASSEGNAZIONE |
  | 3 | NUMERO |
  | + | OP_ADDIZIONE |
  | 2 | NUMERO |
  | ; | PUNTOEVIRGOLA |
  
  Si consideri un testo che descrive un calcolo: "46 - numero_di(mucche);". I lessemi qui potrebbero essere "46", "-", "numero_di", "(", "mucche", ")" e ";". L'analizzatore lessicale denoterebbe i lessemi "4" e "6" come numeri, "-" come carattere e "numero_di" come un token separato. Perfino il lessema ";" ha un significato speciale in alcuni linguaggi (come il C).
  
  A volte, i lessemi che codificano spazi sono ignorati in seguito dall'analizzatore sintattico. Un token, in questo caso, non dovrebbe necessariamente avere senso per essere riconosciuto come tale. "mucche" potrebbe non avere senso in questo linguaggio, così come "numero_di". Essi, in ogni caso, sarebbero riconosciuti come token. Soltanto un'operazione seguente, in tal caso, restituirebbe un errore (ad esempio, la funzione "numero_di" potrebbe non essere definita, oppure la variabile "mucche" potrebbe non esistere, quindi sarebbe il compilatore a generare un errore).
  
  