Names

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.

IDENTIFIER

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.

BASIC_NAME

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.

EXTENDED_NAME

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.