Newsgroup: it.comp.lang.c++
Titolo: Grammatica del C++

Sto scorrendo in questi lo standard del C++
INTERNATIONAL STANDARD ISO/IEC 14882
First edition
1998-09-01
e spesso mi ritrovo di fronte espressioni di questo tipo:
....
literal:
		integer-literal
		character-literal
		floating-literal
		string-literal
		boolean-literal
integer-literal:
		decimal-literal integer-suffix opt
		octal-literal integer-suffix opt
		hexadecimal-literal integer-suffix opt
 
decimal-literal:
		nonzero-digit
		decimal-literal digit
octal-literal:
		0
		octal-literal octal-digit
hexadecimal-literal:
		0x hexadecimal-digit
		0X hexadecimal-digit
		hexadecimal-literal hexadecimal-digit
nonzero-digit: one of
		1 2 3 4 5 6 7 8 9
octal-digit: one of
		0 1 2 3 4 5 6 7
etc. etc....
So che sono le regole della grammatica che il linguaggio implementa,
ma poiche' almeno per me non sono di facile comprensione, c'e' chi
mi puo' fornire delle informazioni (testi, risorse on line, ....)
sull'argomento?
Grazie, Aldo
--
Is everybody in? Is everybody in?
The ceremony is about to begin.
                        (Jim Morrison)

                 integer-literal
con buona pace di chi sosteneva che non esistesse questo termine. :-)
EMG

con buona pace di chi sosteneva che non esistesse questo termine. :-)
Be', l'uso di questo termine e' abbastanza opinabile, a meno di non
distinguere se si intenda "letterale" (cioe' esplicito) oppure nel
senso di "di lettera alfabetica", nel qual caso non e' accettabile se
riferito a un complesso di cifre.
--
Andrea Laforgia        (
andrea_...@bigfoot.com
)

 riferito a un complesso di cifre.
Io l'ho inteso sempre nel primo significato. E usavo questo termine
anche molto prima che imparassi il C, quando programmavo in ASM Z80.
EMG

anche molto prima che imparassi il C, quando programmavo in ASM Z80.
Io sempre nel secondo ! ;)
Quindi confermo cio' che ho detto sopra ! ;)
--
Andrea Laforgia        (
andrea_...@bigfoot.com
)

>
Scusami, hai questo documento in formato elettronico? non e' che potresti 
darmi le coordinate per reperirlo anch'io? 
(ovviamente, se non si tratta di un tomo cartaceo...)
-- 
universe::earth::internet::albion->Greetz++;
 
darX...@tin.it
 
alb...@libero.it
  Fido 2:335/234.21   
http://darxstar.cjb.net
  ICQ UIN# 11151997 - eggdrop on demand
<the trees that whisper in the evening...>

 (ovviamente, se non si tratta di un tomo cartaceo...)
E` in vendita (il file PDF) al sito dell'ANSI, e forse
anche di altri affiliati ISO.  Visita il sito:
http://webstore.ansi.org/ansidocstore/shopper_lookup.asp
Dovrai "iscriverti" (e` gratis), poi pagherai US$ 18
(via carta di credito) per potere scaricare il documento
(poco meno di 3 megabyte).
Le copie cartacee costano molto, MOLTO di piu`
(penso non meno di 100 dollari o 100 euro che
siano).
Puoi consultare un vecchio draft, gratuitamente,
a 
http://www.cygnus.com/misc/wp/
.  Penso che
anche altri siti abbiano copie in linea o scaricabili
di questo vecchio documento, l'ultimo "draft" che
fu reso pubblicamente disponibile gratis (le
regole ISO proibiscono di "regalare" copie di
un qualsiasi documento di standard ufficiale; la
teoria e` che le vendite di queste copie servono
a finanziare l'attivita` dei comitati di standard).
Alex

 (ovviamente, se non si tratta di un tomo cartaceo...)
E' in forma cartacea.  Si ordina a 
http://www.ansi.org
 ; sono 750
pagine a US$18.
-- 
Maurizio Loreti                         
http://www.pd.infn.it/~loreti/mlo.html
Univ. of Padova, Dept. of Physics - Padova, Italy            
lor...@pd.infn.it

 pagine a US$18.
Ho controllato adesso; ora e' ottenibile anche in forma elettronica,
non ho controllato il prezzo.  Una volta era solo su carta.


 
Non sono convinto che il termine "literal" possa essere inteso, come
dici tu, nel senso di riferito a lettera alfabetica; certamente
nell'inglese corrente (cosi' come in italiano del resto) l'accezione
piu' comune e' "esplicito". In informatica poi ha, nella mia esperienza,
sempre il significato di "espresso esplicitamente" ed e' normalmente
usato per indicare le costanti espresse direttamente nel codice.
Non capisco dove stia l'opinabilita'...
Ciao,
Nicola

 Non capisco dove stia l'opinabilita'...
Per i linguaggi non definiti da uno standard, come l'italiano, o
l'inglese, o il Basic, in un certo senso tutto e` opinabile; possiamo 
portare valanghe di dizionari che la pensano come noi, ma un altro 
puo` dire che, no, si sbagliano i dizionari in questione.  Chiaramente,
a un certo punto, viene a trattarsi di esercitazione accademica
priva di qualsivoglia valore, sia pratico sia d'intrattenimento.
Per i linguaggi definiti da uno standard, come il francese (per
cui lo standard ufficiale lo pubblica l'Academie) o il C++ (per cui
lo pubblica l'ISO), sono d'accordo che i termini esplicitamente
definiti nello standard non sono piu` opinabili.
Alex

Non in inglese, e non in italiano.  In francese, non sono sicuro.
In inglese significa ANCHE questo.
In italiano significa ANCHE questo.
Il vocabolario Treccani riporta come seconda interpretazione a quella
classica la seguente : "che concerne una lettera dell'alfabeto" o
anche "in matematica, che si esegue o e' rappresentato con lettere
(invece che con numeri)".
Perche' uno non potrebbe assumere che in matematica e in informatica
le cose stanno allo stesso modo ?
A meno che lo standard non dica che l'uso del termine e' quello di
"esplicito" (e mi sembra che sia cosi'), l'ambiguita' rimane eccome.
--
Andrea Laforgia (
andrea_...@bigfoot.com
)
---------------------------------------------

Non capisco dove stia l'opinabilita'...
L'opinabilita' sta in quel "normalmente".


 "esplicito" (e mi sembra che sia cosi'), l'ambiguita' rimane eccome.
Lo standard del linguaggio C++ definisce i termini usati
nella grammatica del linguaggio attraverso le solite
definizioni alla Backus-e-soci.
Un "literal-integer" e` una sequenza di cifre eventualmente
precedute da un singolo carattere '+' o '-' (dovrei
verificare l'esatta specifica -- ad esempio non ricordo
se "-0343", che sarebbe uno strano "cambio segno"
di un ottale, sia compreso o meno nella definizione).
Questo, nel linguaggio C++ (e, se ben ricordo, gia` anche
nel linguaggio C, a Standard ISO; il C++ non ha cambiato
questo aspetto del linguaggio C, sarei stupito se nonostante
cio` avesse scelto di cambiarne la terminologia relativa).
Quindi, parlando di C, o di C++, non vi e` sicuramente
nessuna ambiguita` su cosa sia un "literal-integer" (e
analogamente per i vari altri "literal" definiti dallo
standard).
Alex

 ---------------------------------------------
Meglio noto come il bastian contrario di it.comp.lang.c++ ;-)
Ciao,
Nicola Musatti

standard).
Se rileggi le righe che ho scritto, io dico esattamente la stessa
cosa. Evidentemente si continua a non voler comprendere il mio punto
di vista, il che mi fa (confesso un "volentieri", dato che si e'
off-topic) desistere da ogni altra eventuale discussione.
Ne' voglio passare per quello che vuole avere ragione a tutti i costi,
per carita'. Io non nego affatto l'accezione comune di "literal" in
quanto "esplicito", che viene, tra l'altro, data e spiegata dal
comitato ANSI sul C++, ma voglio sottolineare che questa parola ha
anche altri significati nella lingua e che, guarda caso, se applicati
al linguaggio, sicuramente per scarsa conoscenza dello standard,
potrebbero generare ambiguita' (so che la legge non ammette ignoranza,
ma non e' realistico pensare che tutti abbiano letto il documento
ufficiale del linguaggio). 
In ogni messaggio che ho scritto ho "letteralmente" scritto : a meno
che il comitato non specifichi (e lo fa), etc...etc...
Punto e basta.


 ufficiale del linguaggio). 
E` invece molto realistico opinare che l'eventuale buffone che
pensasse a una distinzione sintattica fra gli string-literal "#@$!" 
e "pdksks", basata sulla presenza (o esclusivita`) di lettere
alfabetiche nel loro contenuto, farebbe decisamente meglio a
mollare il C++ e dedicarsi alla coltivazione del pungitopo,
attivita` in se e per se degnissima e meno esigente in termini
di materia grigia minima indispensabile.
Neppure le mitiche "expressions literales" (il termine _e`_
ragionevolmente corrente in francese, lo confermo; almeno,
nel francese usato per tradurre i testi russi di matematica e
fisica di un 30-40 anni fa, edizioni MIR, a suo tempo molto
popolari fra gli studenti in quanto economici e curati) sono
fatte di SOLE lettere -- quello che rende una "expression"
anche "literale" e` il fatto di POTERE contenere ANCHE,
eventualmente, delle lettere (oltre ai numeri ed operatori, 
che possono comunque essere presenti).
Supponendo che le "espressioni letterali" che hai trovato
nel vocabolario Treccani siano l'italianizzazione di questo
termine francese, allora ti confermo che tutte le seguenti:
    12
    2+2
    a
    a+b
    a+2
sono "espressioni letterali".
In particolare, e` una "espressione letterale" anche:
    12
Trattasi di una espressione letterale "degenere", se vuoi,
ma, si sa`, la matematica e` fatta cosi` -- la definizione
di "funzione", ad esempio, copre necessariamente anche
casi, che si potrebbero chiamare "degeneri", in cui la
funzione torna e.g. 12 per qualsiasi valore d'ingresso (e
questa funzione viene spesso scritta, appunto, "12":-).
Allora, spiegaci, spiegaci, dov'e` la pretesa ambiguita`?
Se la cifra 1 seguita dalla cifra 2 e` una "espressione
letterale", ed e` anche un literal per il C, il C++, ecc,
ecc, pur non contenendo nessuna lettera, dove mai
potrebbe nascere una qualsiasi ambiguita`...?  Non vi
e` qui alcun conflitto fra i due usi.
Eventualmente, si puo` considerare conflittuale il fatto
che nei vari linguaggi si intende che i literal devono
essere costanti (e non comprendere operatori: 2+2,
e.g., e` costante, ma non literal nella sintassi C++)
mentre le *espressioni* letterali sono, appunto (ma
va che sorpresa!-) delle *espressioni* (quindi non
necessariamente costanti, anche se le costanti sono
ammesse come caso degenere/particolare).
Ma qui e` chiaro (o meglio: dovrebbe essere chiaro a
chiunque abbia finito la prima media) che nell'uso
francese (o francesizzante:-) e` il sostantivo
"espressione" ad essere modificato (in senso
"concessivo", cioe`, "sono ammesse ANCHE delle
lettere, oltre a quel che e` 'normale' nelle espressioni,
cioe` numeri e operatori") dall'aggettivo "letterali".
Nuovamente, non c'e` alcuna vera ambiguita`.
Se non si dice "espressione", ma solo "letterale",
usandolo come sostantivo, si esce chiaramente
dal vocabolario comune.  E` un comune modo di
evoluzione della lingua: quando un aggettivo, in un
dato settore, e` sempre apposto allo stesso identico
sostantivo, il sostantivo finisce per elidersi; qui, da
"CONSTANTE letterale", si passa a "letterale" come
sostantivato; l'unico uso registrato dal vocabolario
inglese per il sostantivo "literal" viene invece dalla
espressione "ERRORE letterale", nel significato di
"errore materiale di trascrizione" (come in quel
romanzo di A. Campanile in cui una signorina dice
"figlio" al posto di "foglio", "ragno" al posto di
"bagno", e cosi` via:-).
Alex

inventori dei linguaggi).
Invece, a me sembra ragionevole *chiarire*.
Comunque, terminerei qui questo dibattito fin troppo lungo.
--
Andrea Laforgia 
andrea_...@bigfoot.com

DIVERSO da quello di "eeowsaqwk", fatta tutta di lettere...?
Non hai capito che cosa voglio dire.
Ma forse perche', presi dalla voglia di controbattere, non ci si
sofferma sul sottile significato delle parole.
Io non sto dicendo che ci sia qualcuno che pensi che "##322!!" sia
diverso da "eeowsaqwk", ma che e' facile pensare (senza tirare fuori
dei gratuiti "tontolone" o "buffone") che che un oggetto del tipo
"##322!!" non appartenga alla stessa tipologia (quella dei "literal")
di un valore numerico.
Io sto affermando che, spesso, su testi anche meno formali dei
documenti ufficiali dei linguaggi, si usa il termine "literal" in
congiunzione soltanto al termine "string", mentre si preferisce usare
il termine "constant" per i valori numerici.
Questo complica le cose, poi, quando qualcuno tira fuori il termine
"literal" in accostamento a un tipo numerico, in quanto, dato che si
e' sempre letto il termine in relazione a costanti stringa, si ha
l'impressione che quel "literal" abbia un valore legato al significato
di "lettera" (o per chiarire, di simbolo alfanumerico).
E, dato che "letterale", per quanto tu voglia continuare a negarlo,
nella lingua italiana HA anche questa possibile interpretazione, nasce
qualche complicazione, seppur minima.
I testi a cui mi riferisco non sono di certo quelli del livello di
Schildt, ma, ad esempio, la definizione della grammatica ANSI C per
yacc di Jeff Lee, menzionata anche nelle FAQ di comp.lang.c, in cui,
nel primo rigo viene scritto :
"%token IDENTIFIER CONSTANT STRING_LITERAL SIZEOF"
In tutto il seguito del documento non c'e' alcun riferimento ad altro
literal che non sia quello stringa.
L'evidenza a cui mi riferisco e' sin troppo chiara.
--
Andrea Laforgia 
andrea_...@bigfoot.com

 Comunque, terminerei qui questo dibattito fin troppo lungo.
Certo, poiche' non hai addotto neanche un argomento concreto (o
calzante; non mi pare che il dizionario Treccani centri molto con la
lingua inglese); speravo pero' di riuscire a farti vedere il tuo errore.
Ciao,
Nicola