2012-10-13 7 views
5

Il numero di token nella seguente istruzione C.Calcolo di token nell'istruzione c

printf("i = %d, &i = %x", i, &i); 

Penso che ci siano 12 token qui. Ma la mia risposta è sbagliata.

Qualcuno può dirmi come trovare i token nell'istruzione C sopra riportata?

PS: So che un token è il testo del programma sorgente che il compilatore non si scompone in elementi componenti.

+1

Quali sono i 12 token che vedi lì? – Mat

+5

Direi che ci sono 10. 'printf'' ('' "i =% d, & i =% x" '', '' i' ',' '&' 'i'') ''; ' –

+0

Bene, conto dieci gettoni. In una certa misura, dipende da quanti dettagli si conservano e quanto si ignora. (Potrebbe essere che tu consideri i token degli spazi?) Mentre lo standard C richiede certe interpretazioni per il preprocessore, che non deve influenzare il resto del parser. – delnan

risposta

9

Per quanto comprendo codice C analisi, i token sono (10 in totale):

printf 
(
"i = %d, &i = %x" 
, 
i 
, 
& 
i 
) 
; 

non conto spazio bianco, è generalmente senso e serve solo come un separatore tra altri token, e non spezzo la stringa letterale in pezzi, perché è un'entità integrale a sé stante.

+0

allora quale sarà il lessema di questa affermazione? –

+0

@rafanadal Di cosa stai parlando? –

+0

kk semplicemente cosa sono i lessemi –

3

Questo assomiglia molto ad un compito scolastico o qualcosa del genere, ma a seconda o meno i conteggi spazi bianchi: 10 o 12 (o 13, se i conteggi spazi bianchi e c'è un ritorno a capo finale)

'printf' '(' '"i = %d, &i = %x"' ',' 'i' ',' '&' 'i' ')' ';' 
    1  2  3    4 5 6 7 8 9 10 
2

sì totalmente 10 token. Poiché i caratteri rappresentati nelle virgolette possono essere trattati come token singolo dall'analizzatore lessicale (LA). Che è la proprietà di LA.