Token in Linguaggio C

Per saper leggere e, soprattutto, scrivere codice in linguaggio C, è fondamentale conoscere la struttura di base del linguaggio e come essa si articoli all'interno di un programma.

In questa lezione vedremo cos'è un Token in linguaggio C e come esso rappresenti la più piccola unità di un programma dotata di significato.

Conoscere cos'è un Token è fondamentale per affrontare, poi, argomenti più complessi come le istruzioni di controllo e i cicli, che vedremo nelle prossime lezioni.

Token

Un file di codice sorgente scritto in linguaggio C può essere visto come un insieme di Token.

Un Token è la più piccola unità di un programma in linguaggio C dotata di significato. In altri termini, si tratta di un insieme di caratteri tali che non possono essere suddivisi ulteriormente senza che il loro significato venga perso.

Esempi di token che abbiamo già visto nelle lezioni precedenti sono gli identificatori, le parole chiave e le costanti.

Allo stesso modo, sono token gli operatori aritmetici, come + e -; i separatori, come , e ;; e i simboli di raggruppamento, come ( e ).

Anche le stringhe letterali sono dei token a tutti gli effetti.

Per comprendere meglio, prendiamo come esempio la seguente riga di codice:

printf("Il valore è: %d\n", valore);

In questo caso abbiamo ben 7 token:

  1. printf: identificatore della funzione printf;
  2. (: parentesi aperta;
  3. "Il valore è: %d\n": stringa letterale;
  4. ,: virgola;
  5. valore: identificatore della variabile valore;
  6. ): parentesi chiusa;
  7. ;: punto e virgola finale.
Definizione

Token in Linguaggio C

Un Token è la più piccola unità di un programma in linguaggio C dotata di significato.

I token possono essere identificatori, costanti, operatori, separatori, simboli di raggruppamento e stringhe letterali.

Il linguaggio C non impone limiti al raggruppamento di token. In altre parole, tra due token è possibile inserire qualsiasi numero di spazi, tabulazioni o ritorni a capo senza che ciò influisca sul significato del programma.

Ad esempio, i seguenti frammenti di codice sono equivalenti:

printf("Il valore è: %d\n", valore);
printf  (  "Il valore è: %d\n"  ,  valore  )  ;
printf
(
"Il valore è: %d\n"
,
valore
)
;

Ciò che importa è la sequenza dei token, non la loro disposizione nello spazio.

Ovviamente, è buona norma mantenere un codice ben indentato e organizzato, in modo da rendere più agevole la lettura e la manutenzione del programma.

Definizione

Il linguaggio C ignora gli spazi bianchi

Il linguaggio C ignora gli spazi bianchi, le tabulazioni e i ritorni a capo tra i token del codice sorgente.

Vi è un'unica limitazione a questa regola che riguarda le direttive di precompilazione, le quali richiedono una sola riga e non possono essere spezzate su più linee.

Token e scrittura del codice

In base alle regole viste sopra, possiamo dedurre alcune importanti conseguenze che possono aiutarci nella scrittura dei nostri programmi:

  • Le istruzioni in linguaggio C possono essere divise su più di una riga di codice:

    Questa possibilità è molto utile per rendere il codice più leggibile e organizzato, soprattutto quando dobbiamo scrivere istruzioni molto lunghe.

    Ad esempio, possiamo scrivere:

    printf("La velocità media è: %f km/h\n",
           distanza / tempo);
    

    In questo modo, la divisione su più righe ci permette di separare in modo chiaro i vari elementi dell'istruzione.

    Inoltre, l'aver inserito degli spazi all'inizio della riga successiva ci permette di capire immediatamente che si tratta di una continuazione della riga precedente.

  • Separare i token con degli spazi aumenta la leggibilità del codice:

    Anche se il linguaggio C ignora gli spazi bianchi tra i token, è buona norma separare i token con degli spazi per rendere il codice più leggibile.

    Ad esempio, scrivere:

    float distanza = (1/2)*accelerazione*tempo*tempo+velocità_iniziale*tempo;
    

    è molto meno chiaro di:

    float distanza = (1 / 2) * accelerazione * tempo * tempo +
                     velocità_iniziale * tempo;
    

    In questo modo, è più facile individuare i vari operatori e operandi dell'espressione.

  • Sfruttare l'indentazione:

    L'indentazione consiste nell'inserire spazi o tabulazioni all'inizio delle righe di codice per evidenziare la struttura del programma.

    Vedremo nelle prossime lezioni come scrivere istruzioni di controllo if e cicli for e while, e l'indentazione sarà fondamentale per rendere il codice più chiaro e comprensibile.

    Usando l'indentazione, ci si può accorgere subito ad occhio che un blocco di codice è contenuto all'interno di un altro blocco; ad esempio:

    if (condizione) {
        printf("La condizione è vera\n");
    }
    

    In questo caso, l'istruzione printf è contenuta all'interno del blocco di codice dell'istruzione if, e l'indentazione ci permette di capirlo immediatamente.

  • Inserire linee vuote permette di separare porzioni di codice:

    L'inserimento di linee vuote tra le varie porzioni di codice aiuta a separare concetti diversi e a rendere il codice più leggibile.

    Ad esempio, possiamo scrivere:

    int a;
    scanf("%d", &a);
    
    int b;
    scanf("%d", &b);
    
    int somma = a + b;
    
    printf("La somma è: %d\n", somma);
    

    In questo modo, è più facile individuare le varie parti del programma e capire cosa fa ciascuna di esse.

In generale, la scrittura di un codice ben strutturato e organizzato è fondamentale per la sua comprensione e manutenzione. Prendersi cura della formattazione del codice è un aspetto importante della programmazione che non va trascurato.

In Sintesi

In questa lezione abbiamo visto cos'è un token in linguaggio C e come esso rappresenti la più piccola unità di un programma dotata di significato.

Abbiamo inoltre analizzato come il linguaggio C ignori gli spazi bianchi tra i token e come possiamo sfruttare questa caratteristica per scrivere codice più leggibile e organizzato.

Nelle prossime lezioni approfondiremo ulteriormente la struttura del linguaggio C, analizzando le istruzioni di controllo e i cicli, e vedremo come organizzare il codice in modo chiaro e comprensibile.