# Variable name starting with integers

When I started doing programming I wondered that why the variable names can't start with integer. Back then I accepted that , may be this is how the compiler designers have decided to go with. But now I am studying Compiler Design and they say that lexical analyzer produces token and it is easy / fast if we use identifiers as regular languages. So the regular expression like this : $$(number)^*(underscore + alphabet)^+(number)^*$$

Why they don't use this? As per compiler I don't see any ambiguity or problem in this as we have symbol table entries for each token. I know that many similar question are asked but I want to know as per lexical analysis and compiler design perspective.

In many languages, 1e3 is a literal that represents 1000, 0x10 is a literal that represents 16. If we used your proposed regexp for variable names, it would be ambiguous whether those expressions should be represented as a literal or as a variable name.