Some of the kinds of entities an identifier might denote include variables, data types, labels, subroutines, and modules.
However, a common restriction is not to permit whitespace characters and language operators; this simplifies tokenization by making it free-form and context-free.
In ALGOL this was possible because keywords are syntactically differentiated, so there is no risk of collision or ambiguity, spaces are eliminated during the line reconstruction phase, and the source was processed via scannerless parsing, so lexing could be context-sensitive.
This overlap can be handled in various ways: these may be forbidden from being identifiers – which simplifies tokenization and parsing – in which case they are reserved words; they may both be allowed but distinguished in other ways, such as via stropping; or keyword sequences may be allowed as identifiers and which sense is determined from context, which requires a context-sensitive lexer.
Compilers and interpreters do not usually assign any semantic meaning to an identifier based on the actual character sequence used.