Start Functions Events Constants Types Language Articles

NOTE: This is not a LSL tutorial. It's a reference guide about the structure of the language.

A script must adhere to the following structure:

<globals>
<default_state>
<other_states>

<globals> are zero or more global declarations. Each global declaration is either a variable declaration or a user-defined function declaration.

<default_state> is a state. It is declared with the keyword default followed by an open brace symbol {, then one or more event declarations, and finally a close brace symbol }. This state is mandatory.

<other_states> are zero or more states. If you need more states than default, you can define them with the keyword state followed by the state name, then an open brace symbol {, then one or more event declarations, and finally a close brace symbol }. See state for more information.

The shortest script that can be written is:

default{timer(){}}

which has a default state containing a timer event, which will do nothing because the script lacks the code necessary to trigger it. So, this script does nothing at all.

Spaces and newlines between words or symbols can be used at will, with some exceptions. For example, the above minimalistic, do-nothing script can be rewritten in a more readable way, as follows:

default
{
    timer()
    {
    }
}

Names must start with a letter or underscore _, and may be followed by any sequence of letters, numbers or underscores. For example, _, , X2392Z, _1st, abracadabra and My_name are all valid names; 1st and N#1 are not. Names must not have any spaces in between.

No spaces can appear between composite symbols that are formed by two symbols, like ++ or >=. In some pathological cases, a space can even change the meaning of an expression; for example, a * --b is not the same as a * - -b.

Any names can be used for variables, functions, function parameters, states or labels that you define, except for a few that can't because they have special meanings for the language. Those which have special meanings are called reserved keywords.

The following words are reserved keywords in LSL:

In addition to all these, all types, events and constants are also reserved keywords, meaning you can't use them as names for your own variables, labels, states, parameters or functions. The library functions are not reserved words (you can't define a function with a name of a library function, because they are in the global namespace, but you can use the same name for your own variables or parameters — not that you would want to, though).

See also a list of the symbols allowed.