Per la maggior parte questo non ha nulla a che fare con la semplificazione per gli scrittori di compilatori e l'efficienza di analisi, ma, più, con la progettazione di una sintassi che incoraggia un codice chiaro leggibile e univoco.
I designer del linguaggio hanno pensato che sarebbe stato bello poter scrivere letterali numerici come il numero 1 semplicemente come 1 .
Sarebbe del tutto possibile progettare una sintassi del linguaggio in cui i letterali numerici fossero citati in qualche modo per esempio tilde, quindi il letterale numerico per il numero uno era codificato come ~ 1 ~ e qualsiasi cosa non fosse una parola chiave e non racchiuso tra virgolette è stato trattato come un nome di variabile.
Quindi potresti codificare dichiarazioni come:
1 = ~2~
two = 1 * ~2~
Ma anche:
2 = ~3~
six = 2 + 2
Qualsiasi sintassi tu scelga codice ambiguo e difficile da seguire è inevitabile.
Il linguaggio C e la maggior parte dei linguaggi "parentesi graffe" discendenti da C ritenevano sia una buona idea consentire ai programmatori di codificare direttamente letterali ottali ed esadecimali e, per specificare il tipo di letterale, se ciò era importante. Quindi
010 // Octal 10 = 8;
0x10 // Hexadecimal 10 = 16;
5l // long integer with decimal value 5
2.0d // double float with value 2
Quindi, anche se hai permesso che i nomi delle variabili iniziassero con un numero seguito da una combinazione di numeri e lettere che includeva almeno una lettera, avresti presentato al programmatore il problema di decidere se un dato gruppo formasse un nome di variabile o un valore letterale numerico
quindi
2lll = 22 // OK
2ll = 2 // compiler error
Tale ambiguità non aiuterebbe nessuno a scrivere o leggere un programma.
Per un esempio del mondo reale strettamente correlato puoi guardare al linguaggio PL / 1 i cui progettisti pensavano che essere in grado di usare le parole chiave come nomi di variabili fosse una buona idea in modo che:
IF THEN THEN THEN = ELSE; ELSE ELSE = THEN;
IF IF THEN ELSE = IF; ELSE THEN = ELSE;
DO WHILE (WHILE = DO); END = WHILE + DO; END;
È un codice valido che compila ed esegue.