Symbols, along with parentheses, are used for building ground expressions.
Symbol = StaticSymbol | DynamicSymbol. StaticSymbol = Character | Word | Number. DynamicSymbol = ReferenceToFunction | ReferenceToTable | ReferenceToBox | ReferenceToVector | ReferenceToString | ReferenceToChannel.
The symbols are divided into two classes: static symbols and dynamic symbols.
A static symbol is either a character symbol, a word symbol, or a numeric symbol.
The static symbols exist "objectively": a static symbol may be written to an input/output channel, and then read back, the symbol read back being the same as the symbol that has been written. Thus, the static symbols, in a sense, exist before the program is run, and continue to exist after the program has been run.
A dynamic symbol is either a reference to a function definition or to an object. This symbol contains a pointer to the memory location where the function definition or the object resides at run time.
The dynamic symbols, in contrast to the static ones, exist "subjectively". A dynamic symbol is created either at the moment the program is loaded, or when the program is being executed. A dynamic symbol may be written into an input/output channel, but it cannot be read back. The execution of a program having terminated, all dynamic symbols created during the execution lose any meaning.