The class definition file is a plain text file, which conists of a stream of tokens. Encoding is with character set] (a superset of ASCII, although it is recommended to just use ASCII and to escape any non-ASCII characters).

The possible kind of tokens are:
  *  Open: Write <tt>(</tt> to begin a block.
  *  Close: Write <tt>)</tt> to end a block.
  *  Plain name: A plain word without the prefix to indicate what kind (although <tt>,</tt> and <tt>=</tt> prefixes may still be possible). The set of possible plain names is fixed; you cannot define your own.
  *  Number: A 32-bit integer. Can be positive or negative (with <tt>-</tt> prefix), or can be hexadecimal with <tt>0x</tt> at first, or octal with <tt>0o</tt> at first.
  *  String: A quoted string. See also [formatting controls]. Any backslashes and quotation marks must be escaped, and there should not be unescaped line breaks.
  *  Class: A name with <tt>$</tt> at first. Class names are global, are user-defined, and do not need to be declared before they are used (but must still be declared in the same file).
  *  User sound: A name with <tt>!</tt> at first. Must be a sound name in the [Picture file format|.xclass file], without the .WAV suffix.
  *  User local variable: A name with <tt>%</tt> at first. Local variable names are scoped to the definition of a class, and need not ever be declared.
  *  User global variable: A name with at first. Global, and need not be declared.
  *  User message: A name with <tt>#</tt> at first. Global, and need not be declared.
  *  Label: A name with <tt>:</tt> at first. Scoped to the definition of a class. Must exist within that class (although it can be in a different message block) to jump to it.
  *  User function: A name with <tt>&</tt> at first. Global, and must be declared if used.
  *  Key name: A name with <tt>'</tt> at first. You can't define your own; see [Hero Mesh key name] for a list. These are not necessarily bound to the same physical keys that they are named, however.

Also:
  *  Prefixes: Many kind of tokens also accept a <tt>=</tt> and/or <tt>,</tt> prefix. These are used as modifiers to indicate the use in a different case.
  *  Comments: Start with <tt>;</tt> (outside of a string literal) and up to the next line break is a comment.
  *  Macros: See [Preprocessor].