CSN.1 complicates names by allowing many symbols to appear in names (e.g. *), including even spaces(!). Without some additional rules, this can create ambiguities. We didn't have access to a formal specification so we invented some rules. We define three kinds of names.
An identifier is used as a function name. It must begin with an alphabetic character, then may be followed by any number of alphanumerics or underscores.
A basic name is just that: basic. It consists of alphanumeric, underscore, and space characters. It may not begin or end with a space. Additionally, the characters '0', '1', 'L', and 'H' are excluded because of their use as literals and potential ambiguities.
An extended name allows for an extended set of characters compared to BASIC_NAME. In fact, it allows any character except for: '<', '>', '(', ')', ':', and '='. It must begin and end with a non space character. There are two places where an EXTENDED_NAME may appear:
as the argument for a function in an exponent
inside angle brackets, after the '<' and before any ':', '(', or '>' character.
Every BASIC_NAME is also an EXTENDED_NAME. When the grammar calls for an EXTENDED_NAME, any name that is also a BASIC_NAME is valid.