# Identifiers

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

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 `_`