Dies hat größtenteils nichts damit zu tun, dass es den Compilern leichter fällt und die Effizienz beim Parsen steigt, sondern vielmehr damit, dass eine Syntax entwickelt wird, die klar lesbaren und eindeutigen Code fördert.
Die Sprachdesigner fanden es schön, numerische Literale wie die Nummer 1 als einfache 1 schreiben zu können .
Es wäre durchaus möglich, eine Sprachsyntax zu entwerfen, in der numerische Literale in Anführungszeichen gesetzt werden, z. B. Tildas, sodass das numerische Literal für Nummer eins als ~ 1 ~ codiert und alles, was nicht in Anführungszeichen steht, als Variablenname behandelt wird .
Sie könnten also Anweisungen wie die folgenden codieren:
1 = ~2~
two = 1 * ~2~
Aber auch:
2 = ~3~
six = 2 + 2
Unabhängig davon, welche Syntax Sie für mehrdeutigen und schwer zu verfolgenden Code wählen, ist dies unvermeidlich.
Die C-Sprache und die meisten der von C abgeleiteten "geschweiften Klammern" hielten es auch für eine gute Idee, Programmierern die direkte Codierung von Oktal- und Hexadezimal-Literalen zu ermöglichen und den Typ des Literal anzugeben, wenn dies wichtig ist. So
010 // Octal 10 = 8;
0x10 // Hexadecimal 10 = 16;
5l // long integer with decimal value 5
2.0d // double float with value 2
Selbst wenn Sie also zulassen, dass Variablennamen mit einer Zahl beginnen, gefolgt von einer Kombination aus Zahlen und Buchstaben, die mindestens einen Buchstaben enthält, würden Sie dem Programmierer das Problem stellen, zu entscheiden, ob eine gegebene Gruppe einen Variablennamen oder ein numerisches Literal bildet
2lll = 22 // OK
2ll = 2 // compiler error
Eine solche Mehrdeutigkeit würde niemandem helfen, ein Programm zu schreiben oder zu lesen.
Ein nahe verwandtes Beispiel aus der Praxis finden Sie in PL / 1, dessen Designer die Verwendung von Schlüsselwörtern als Variablennamen für eine gute Idee hielten.
IF THEN THEN THEN = ELSE; ELSE ELSE = THEN;
IF IF THEN ELSE = IF; ELSE THEN = ELSE;
DO WHILE (WHILE = DO); END = WHILE + DO; END;
Ist gültiger Code, der kompiliert und ausgeführt wird.