Expand/Shrink

Declarations

Variable names and other user-defined symbols are known as identifiers, which may be of any length, with upper and lower case being distinct. Identifiers must start with a letter and then be followed by letters, digits or underscores. All unicode characters may be used, as long as your editor saves the source files as utf-8 - note however that all non-ascii characters are treated as letters, including a few that might look rather similar to operators, and even some numbers.
The following reserved words have special meaning in Phix and may not be used as identifiers:

    and            or             not         xor
    break          continue       exit        fallthru
    case           default        format      fallthrough
    constant       enum           abstract    iff
    try            catch          dynamic     iif*
    class          struct         extends
    do             while          switch      private
    forward        global         export      public
    for            by             to          end
    if             then           elsif       else
    true           false          null        goto
    function       procedure      type        return
    ifdef          elsifdef       elsedef
    include        with           without
 
Edita displays these words in teal (easily changed in Options/Colours).
(* iif is a simple alias of iff, and included for compatibility reasons only, ditto fallthr[o]u[gh], and int[eger], seq[uence] below)
Since version 0.8.0 the following are also treated as reserved words:

    abort          atom           number      bool
    close          compare        int         integer
    seq            sequence       string      object
    delete         equal          floor       flush
    log            peek           poke        power
    prepend        profile        trace       seek
    sin            sleep          version     where
 
Identifiers can be used in naming the following:
Note however that none of the following (and then some) are technically reserved words, although the editor colours them differently, to give you a hint that it could be rather foolish to use them as identifiers:

    apply          assert         boolean     call
    choose         crash          date        elapsed
    factors        filter         find        free
    head           join           largest     listen
    lower          map            match       max
    min            mod            pad         print
    product        proper         progress    repeat
    reverse        shorten        shuffle     sign
    smallest       sort           split       substitute
    sum            system         tail        trim
    union          unique         upper       value
 
Also, do yourself a favour and avoid these JavaScript reserved words, should you plan on ever using pwa/p2js to run stuff in a browser:

    arguments       await           const           debugger
    delete          eval            final           finally
    implements      import          in              instanceof
    interface       let             native          new
    package         protected       super           synchronized
    this            throws          transient       typeof          
    var             void            volatile        yield
 
The transpiler issues a fatal error should you try to use any of those. A few more have also slipped in that trigger strictly unnecessary errors, some of which I might be able to stop the transpiler from issuing, and some of which will have to be added to the above table. (I basically used the same mechanism for syntax colouring and reserved words, oops.)