# Identifiers

> Lexer:
> IDENTIFIER_OR_KEYWORD :
> [`a`-`z` `A`-`Z`] [`a`-`z` `A`-`Z` `0`-`9` `_`]*
> | `_` [`a`-`z` `A`-`Z` `0`-`9` `_`]+

> IDENTIFIER :
> IDENTIFIER_OR_KEYWORD Except a strict or reserved keyword

An identifier is any nonempty ASCII string of the following form:

Either

- The first character is a letter.
- The remaining characters are alphanumeric or `_`.

Or

- The first character is `_`.
- The identifier is more than one character. `_` alone is not an identifier.
- The remaining characters are alphanumeric or `_`.