APPENDICE H La sintassi del C Nella notazione della sintassi utilizzata, le categorie sintattiche (non terminali) sono state indicate da uno stile tipografico in corsivo, mentre le parole letterali e i membri dell insieme dei caratteri (terminali) sono stati indicati da uno stile tipografico in grassetto. I due punti (:) successivi a un non terminale introducono la sua definizione. Le definizioni alternative sono elencate su righe separate, eccetto quando siano state introdotte dalle parole una/o di. Un simbolo opzionale è indicato dal pedice opz, così che { espressione opz } indica che nelle parentesi graffe è racchiusa un espressione opzionale. Sommario della sintassi del linguaggio H.1 Grammatica lessicale H.1.1 Simboli simbolo: parola-chiave costante stringa-letterale operatore punteggiatura simbolo-del-preprocessore: nome-di-intestazione numero-pp costante-di-carattere stringa-letterale operatore punteggiatura ogni carattere non di spazio bianco che non coincida con uno dei suddetti H.1.2 Parole chiave parola-chiave: una di auto double int struct break else long switch case enum register typedef CAPPAH.pmd 1
2 APPENDICE H char extern return union const float short unsigned continue for signed void default goto sizeof volatile do if static while H.1.3 Identificatori : non-numero non-numero numero non-numero: uno di _ a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z numero: uno di 0 1 2 3 4 5 6 7 8 9 H.1.4 Costanti costante: costante-in-virgola-mobile costante-intera costante-di-enumerazione costante-di-carattere costante-in-virgola-mobile: costante-frazionaria parte-esponente opz suffisso-in-virgola-mobile opz sequenza-di-numeri parte-esponente suffisso-in-virgola-mobile opz costante-frazionaria: sequenza-di-numeri opz. sequenza-di-numeri sequenza-di-numeri. parte-esponente: e segno sequenza-di-numeri E segno sequenza-di-numeri segno: uno di + sequenza-di-numeri: numero sequenza-di-numeri numero suffisso-in-virgola-mobile: uno di f l F L costante-intera: CAPPAH.pmd 2
LA SINTASSI DEL C 3 costante-decimale suffisso-intero opz costante-ottale suffisso-intero opz costante-esadecimale suffisso-intero opz costante-decimale: numero-non-zero costante-decimale numero costante-ottale: 0 costante-ottale numero-ottale costante-esadecimale: 0x numero-esadecimale 0X numero-esadecimale costante-esadecimale numero-esadecimale numero-non-zero: uno di 1 2 3 4 5 6 7 8 9 numero-ottale: uno di 0 1 2 3 4 5 6 7 numero-esadecimale: uno di 0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F suffisso-intero: suffisso-unsigned suffisso-long opz suffisso-long suffisso-unsigned opz suffisso-unsigned: uno di u U suffisso-long: uno di l L costante-di-enumerazione: costante-di-carattere: sequenza-c-char L sequenza-c-char sequenza-c-char: c-char sequenza-c-char c-char c-char: qualsiasi membro dell insieme di caratteri di origine eccetto l apice singolo, il backslash \ o il carattere di newline CAPPAH.pmd 3
4 APPENDICE H sequenza-di-escape sequenza-di-escape: sequenza-di-escape-semplice sequenza-di-escape-ottale sequenza-di-escape-esadecimale sequenza-di-escape-semplice: una di \ \ \? \\ \a \b \f \n \r \t \v sequenza-di-escape-ottale: \ numero-ottale \ numero-ottale numero-ottale \ numero-ottale numero-ottale numero-ottale sequenza-di-escape-esadecimale: \x numero-esadecimale sequenza-di-escape-esadecimale numero-esadecimale H.1.5 Stringhe letterali stringa-letterale: sequenza-s-char opz L sequenza-s-char opz sequenza-s-char: s-char sequenza-s-char s-char s-char: qualsiasi membro dell insieme di caratteri di origine eccetto le virgolette, il backslash \ o il carattere di newline sequenza-di-escape H.1.6 Operatori operatore: uno di [ ] ( ). > ++ & * + ~! sizeof / % << >> < > <= >= ==!= ^ &&? : = *= /= %= += = <<= >>= &= ^= =, # ## H.1.7 Punteggiatura punteggiatura: uno di [ ] ( ) { } *, : = ;... # CAPPAH.pmd 4
LA SINTASSI DEL C 5 H.1.8 Nomi di intestazione nome-di-intestazione: <sequenza-h-char> sequenza-q-char sequenza-h-char: h-char sequenza-h-char h-char h-char: qualsiasi membro dell insieme dei caratteri di origine eccetto il carattere di newline e > sequenza-q-char: q-char sequenza-q-char q-char q-char: qualsiasi membro dell insieme dei caratteri di origine eccetto il carattere di newline e «H.1.9 Numeri del preprocessore numero-pp: numero. numero numero-pp numero numero-pp non-numero numero-pp e segno numero-pp E segno numero-pp. H.2 Grammatica della struttura della frase H.2.1 Espressioni espressione-primaria: costante stringa-letterale ( espressione ) espressione-con-suffisso espressione-primaria espressione-con-suffisso [ espressione ] espressione-con-suffisso ( lista-di-espressioni-di-argomento opz ) espressione-con-suffisso. espressione-con-suffisso -> espressione-con-suffisso ++ espressione-con-suffisso lista-di-espressioni-di-argomento: espressione-di-assegnamento lista-di-espressioni-di-argomento, espressione-di-assegnamento CAPPAH.pmd 5
6 APPENDICE H espressione-unaria: espressione-con-suffisso ++ espressione-unaria espressione-unaria operatore-unario espressione-di-conversione sizeof espressione-unaria sizeof ( nome-di-tipo ) operatore-unario: uno di & * + ~! espressione-di-conversione: espressione-unaria ( nome-di-tipo ) espressione-di-conversione espressione-moltiplicativa: espressione-di-conversione espressione-moltiplicativa * espressione-di-conversione espressione-moltiplicativa / espressione-di-conversione espressione-moltiplicativa % espressione-di-conversione espressione-additiva: espressione-moltiplicativa espressione-additiva + espressione-moltiplicativa espressione-additiva espressione-moltiplicativa espressione-di-scorrimento: espressione-additiva espressione-di-scorrimento << espressione-additiva espressione-di-scorrimento >> espressione-additiva espressione-relazionale: espressione-di-scorrimento espressione-relazionale < espressione-di-scorrimento espressione-relazionale > espressione-di-scorrimento espressione-relazionale <= espressione-di-scorrimento espressione-relazionale >= espressione-di-scorrimento espressione-di-uguaglianza: espressione-relazionale espressione-di-uguaglianza == espressione-relazionale espressione-di-uguaglianza!= espressione-relazionale espressione-and: espressione-di-uguaglianza espressione-and & espressione-di-uguaglianza espressione-or-esclusivo: espressione-and espressione-or-esclusivo ^ espressione-and espressione-or-inclusivo: CAPPAH.pmd 6
LA SINTASSI DEL C 7 espressione-or-esclusivo espressione-or-inclusivo espressione-or-esclusivo espressione-and-logico: espressione-or-inclusivo espressione-and-logico && espressione-or-inclusivo espressione-or-logico: espressione-and-logico espressione-or-logico espressione-and-logico espressione-condizionale: espressione-or-logico espressione-or-logico? espressione : espressione-condizionale espressione-di-assegnamento: espressione-condizionale espressione-unaria operatore-di-assegnamento espressione-di-assegnamento operatore-di-assegnamento: uno di = *= /= %= += -= <<= >>= &= ^= = espressione: espressione-condizionale espressione, espressione-di-assegnamento espressione-costante: espressione-condizionale H.2.2 Dichiarazioni dichiarazione: specifiche-di-dichiarazione elenco-di-dichiaratori-iniz opz ; specifiche-di-dichiarazione: specifica-di-classe-di-memoria specifiche-di-dichiarazione opz specifica-di-tipo specifiche-di-dichiarazione opz qualificatore-di-tipo specifiche-di-dichiarazione opz elenco-di-dichiaratori-iniz: dichiaratore-iniz elenco-di-dichiaratori-iniz, dichiaratore-iniz dichiaratore-iniz: dichiaratore dichiaratore = inizializzatore specifica-di-classe-di-memoria: typedef extern static auto register CAPPAH.pmd 7
8 APPENDICE H specifica-di-tipo: void char short int long float double signed unsigned specifica-struct-o-union specifica-enum nome-typedef specifica-struct-o-union: struct-o-union { elenco-di-dichiarazioni-struct } struct-o-union struct-o-union: struct union elenco-di-dichiarazioni-struct: dichiarazione-struct elenco-di-dichiarazioni-struct dichiarazione-struct dichiarazione-struct: elenco-di-specifiche-qualificatori elenco-di-dichiaratori-struct ; elenco-di-specifiche-qualificatori: specifica-di-tipo elenco-di-specifiche-qualificatori opz qualificatore-di-tipo elenco-di-specifiche-qualificatori opz elenco-di-dichiaratori-struct: dichiaratore-struct elenco-di-dichiaratori-struct, dichiaratore-struct dichiaratore-struct: dichiaratore dichiaratore opz : espressione-costante specifica-enum: enum opz { elenco-di-enumeratori } enum elenco-di-enumeratori: enumeratore elenco-di-enumeratori, enumeratore enumeratore: costante-di-enumerazione costante-di-enumerazione = espressione-costante CAPPAH.pmd 8
LA SINTASSI DEL C 9 qualificatore-di-tipo: const volatile dichiaratore: puntatore opz dichiaratore-diretto dichiaratore-diretto: ( dichiaratore ) dichiaratore-diretto [ espressione-costante opz ] dichiaratore-diretto ( elenco-di-tipi-di-parametro ) dichiaratore-diretto ( elenco-di-identificatori opz ) puntatore: * elenco-di-qualificatori-di-tipo opz * elenco-di-qualificatori-di-tipo opz puntatore elenco-di-qualificatori-di-tipo: qualificatore-di-tipo elenco-di-qualificatori-di-tipo qualificatore-di-tipo elenco-di-tipi-di-parametro: elenco-di-parametri elenco-di-parametri,... elenco-di-parametri: dichiarazione-di-parametro elenco-di-parametri, dichiarazione-di-parametro dichiarazione-di-parametro: specifiche-di-dichiarazione dichiaratore specifiche-di-dichiarazione dichiaratore-astratto opz elenco-di-identificatori: elenco-di-identificatori, nome-di-tipo: elenco-di-specifiche-qualificatori dichiaratore-astratto opz dichiaratore-astratto: puntatore puntatore opz dichiaratore-astratto-diretto dichiaratore-astratto-diretto ( dichiaratore-astratto ) dichiaratore-astratto-diretto opz [ espressione-costante opz ] dichiaratore-astratto-diretto opz ( elenco-di-tipi-di-parametro opz ) nome-typedef: CAPPAH.pmd 9
10 APPENDICE H inizializzatore: espressione-di-assegnamento { elenco-di-inizializzatori } { elenco-di-inizializzatori, } elenco-di-inizializzatori: inizializzatore elenco-di-inizializzatori, inizializzatore H.2.3 Istruzioni istruzione: istruzione-etichettata istruzione-composta istruzione-di-espressione istruzione-di-selezione istruzione-di-iterazione istruzione-di-salto istruzione-etichettata: : istruzione case espressione-costante : istruzione default : istruzione istruzione-composta: { elenco-di-dichiarazioni elenco-di-istruzioni opz } elenco-di-dichiarazioni: dichiarazione elenco-di-dichiarazioni dichiarazione elenco-di-istruzioni: istruzione elenco-di-istruzioni istruzione istruzione-di-espressione: espressione opz ; istruzione-di-selezione: if ( espressione ) istruzione if ( espressione ) istruzione else istruzione switch ( espressione ) istruzione istruzione-di-iterazione: while ( espressione ) istruzione do istruzione while ( espressione ) ; for ( espressione opz ; espressione opz ; espressione opz ) istruzione istruzione-di-salto: goto ; continue ; break ; return espressione opz ; CAPPAH.pmd 10
LA SINTASSI DEL C 11 H.2.4 Definizioni esterne unità-di-traduzione: dichiarazione-esterna unità-di-traduzione dichiarazione-esterna dichiarazione-esterna: definizione-di-funzione dichiarazione definizione-di-funzione: specifiche-di-dichiarazione opz dichiaratore elenco-di-dichiarazioni opz istruzione-composta H.3 Direttive del preprocessore file-del-preprocessore: gruppo opz gruppo: parte-di-gruppo gruppo parte-di-gruppo parte-di-gruppo: simboli-pp opz newline sezione-if riga-di-controllo sezione-if: gruppo-if gruppi-elif opz gruppo-else opz riga-endif gruppo-if: # if espressione-costante newline gruppo opz # ifdef newline gruppo opz # ifndef newline gruppo opz gruppi-elif: gruppo-elif gruppi-elif gruppo-elif gruppo-elif: # elif espressione-costante newline gruppo opz gruppo-else: # else newline gruppo opz riga-endif: # endif newline riga-di-controllo: # include simboli-pp newline # define elenco-di-sostituzioni newline # define lparen elenco-di-identificatori opz ) elenco-di-sostituzioni newline # undef newline # line simboli-pp newline CAPPAH.pmd 11
12 APPENDICE H # error simboli-pp opz newline # pragma simboli-pp opz newline # newline lparen: il carattere di parentesi tonda aperta senza spazi bianchi precedenti elenco-di-sostituzioni: simboli-pp opz simboli-pp: simbolo-del-preprocessore simboli-pp simbolo-del-preprocessore newline: il carattere di newline (Diritti d autore: questo materiale è stato condensato e adattato a partire dal documento American National Standard for Information Systems Programming Language C, ANSI/ ISO 9899: 1990. Copie di questo standard possono essere acquistate dalla American National Standards Institute, West 42nd Street, New York, NY 10036.) CAPPAH.pmd 12