Pour la plupart, cela n'a rien à voir avec la facilité pour les rédacteurs du compilateur et l'efficacité de l'analyse, mais plutôt avec la conception d'une syntaxe qui encourage un code clair et lisible et sans ambiguïté.
Ses concepteurs de langage ont pensé qu'il serait bien de pouvoir écrire des littéraux numériques comme le chiffre 1 comme tout simplement 1 .
Il serait tout à fait possible de concevoir une syntaxe de langage dans laquelle les littéraux numériques seraient cités d'une certaine manière, par exemple les tildas, de sorte que le littéral numérique pour le numéro un serait codé comme ~ 1 ~ et tout ce qui n'est pas un mot-clé et non entre guillemets serait traité comme un nom de variable .
Vous pouvez donc coder des instructions comme:
1 = ~2~
two = 1 * ~2~
Mais aussi:
2 = ~3~
six = 2 + 2
Quelle que soit la syntaxe que vous choisissez, le code ambigu et difficile à suivre est inévitable.
Le langage C et la plupart des langages "accolades" issus de C pensaient également que c'était une bonne idée de permettre aux programmeurs de coder directement les littéraux octal et hexadécimal, et de spécifier le type du littéral si cela était important. Alors
010 // Octal 10 = 8;
0x10 // Hexadecimal 10 = 16;
5l // long integer with decimal value 5
2.0d // double float with value 2
Donc, même si vous autorisez les noms de variables à commencer par un nombre suivi d'une combinaison de chiffres et de lettres qui comprenait au moins une lettre, vous poseriez au programmeur le problème de décider si un groupe donné formait un nom de variable ou un littéral numérique afin
2lll = 22 // OK
2ll = 2 // compiler error
Une telle ambiguïté n'aiderait personne à écrire ou à lire un programme.
Pour un exemple proche du monde réel, vous pouvez regarder le langage PL / 1 dont les concepteurs pensaient que pouvoir utiliser des mots clés comme noms de variable était une bonne idée, de sorte que:
IF THEN THEN THEN = ELSE; ELSE ELSE = THEN;
IF IF THEN ELSE = IF; ELSE THEN = ELSE;
DO WHILE (WHILE = DO); END = WHILE + DO; END;
Est un code valide qui compile et exécute.