Home
Accesso / Registrazione
 di 

Programmazione orientata agli oggetti in ANSI-C. Lo Scanner

Programmazione orientata agli oggetti in ANSI-C. Lo Scanner

Nel ciclo principale, una volta che una linea di input è stata letta in bug[], viene passata a scan(), che per ogni chiamata inserisce il successivo simbolo di input all'interno della variabile token. Alla fine di una linea token è zero:

#include <ctype.h>
#include <errno.h>
#include <stdlib.h>
#include "parse.h" /* defines NUMBER */
static double number; /* if NUMBER: numerical value */
static enum tokens scan (const char * buf)
/* return token = next input symbol */
{ static const char * bp;
if (buf)
bp = buf; /* new input line */
while (isspace(* bp))
++ bp;
if (isdigit(* bp) || * bp == ’.’)
{ errno = 0;
token = NUMBER, number = strtod(bp, (char **) & bp);
if (errno == ERANGE)
error("bad value: %s", strerror(errno));
}
else
token = * bp ? * bp ++ : 0;
return token;
}

Chiamiamo scan() con l'indirizzo di una linea di input o con un puntatore null per continuare a lavorare sulla linea corrente. Gli spazi bianchi sono ignorati e per una cifra o per un punto decimale estraiamo un numero floating point con la funzione C ANSI strod(). Ogni altro carattere viene restituito così come è.

Il risultato di scan() viene memorizzato nella variabile globale token - ciò semplifica il riconoscimento. Se identifichiamo un numero, restituiremo il valore univoco NUMBER e il valore corrente di tale numero viene memorizzato nella variabile globale number.

 

 

Scrivi un commento all'articolo esprimendo la tua opinione sul tema, chiedendo eventuali spiegazioni e/o approfondimenti e contribuendo allo sviluppo dell'argomento proposto. Verranno accettati solo commenti a tema con l'argomento dell'articolo stesso. Commenti NON a tema dovranno essere necessariamente inseriti nel Forum creando un "nuovo argomento di discussione". Per commentare devi accedere al Blog

 

 

Login   
 Twitter Facebook LinkedIn Youtube Google RSS

Chi è online

Ci sono attualmente 32 utenti e 83 visitatori collegati.

Ultimi Commenti