Initializing help system before first use

Parsed and unparsed formulae

All formulae input into Xpress NonLinear are parsed into a reverse-Polish execution stack. Tokens are identified by their type and a value. The table below shows the values used in interface functions.

All formulae are provided in the interface functions as two parallel arrays:
 an integer array of token types;
 a double array of token values.

The last token type in the array should be an end-of-formula token (XSLP_EOF, which evaluates to zero).

If the value required is an integer, it should still be provided in the array of token values as a double precision value.

Even if a token type requires no token value, it is best practice to initialize such values as zeros.

Type Description Value
XSLP_COL column index of matrix column.
XSLP_CON constant (double) value.
XSLP_CONSTRAINT constraint index of constraint. Note that constraints count from 1, so that the index of matrix row n is n + 1.
XSLP_CV character variable index of character variable.
XSLP_DEL delimiter XSLP_COMMA (1) = comma (",")
XSLP_COLON (2) = colon (":")
XSLP_EOF end of formula not required: use zero
XSLP_FUN user function index of function
XSLP_IFUN internal function index of function
XSLP_LB left bracket not required: use zero
XSLP_OP operator XSLP_UMINUS (1) = unary minus ("-")
XSLP_EXPONENT (2) = exponent ("**" or "^")
XSLP_MULTIPLY (3) = multiplication ("*")
XSLP_DIVIDE (4) = division ("/")
XSLP_PLUS (5) = addition ("+")
XSLP_MINUS (6) = subtraction ("-")
XSLP_RB right bracket not required: use zero
XSLP_ROW row index of matrix row.
XSLP_STRING character string internal index of character string
XSLP_UNKNOWN unidentified token internal index of character string
XSLP_VAR variable index of variable. Note that variables count from 1, so that the index of matrix column n is n + 1.
XSLP_VARREF reference to variable index of variable. Note that variables count from 1, so that the index of matrix column n is n + 1.
XSLP_UFARGTYPE requirements and types of argument for a user function bitmap of types (see below).
XSLP_UFEXETYPE linkage of a user function bitmap of linkage information (see below).

Argument types for user function definition are stored as a bit map. Each type is stored in 3 bits: bits 0-2 for argument 1, bits 3-5 for argument 2 and so on. The possible values for each argument are as follows:

0 omitted
1 NULL
2 INTEGER
3 DOUBLE
4 VARIANT
6 CHAR

The linkage type and other function information are stored as a bit map as follows:

Bits 0-2 type of linkage:
1 = User library or DLL
2 = Excel spreadsheet
3 = Excel macro
5 = MOSEL
7 = COM
Bits 3-4 re-evaluation flags:
0 = default
1 (Bit 3) = re-evaluation at each SLP iteration
2 (Bit 4) = re-evaluation when independent variables are outside tolerance
Bits 6-7 derivative flags:
0 = default
1 (Bit 6) = tangential derivatives
2 (Bit 7) = forward derivatives
Bit 8 calling mechanism:
0 = standard
1 = CDECL (Windows only)
Bit 24 set if the function is multi-valued
Bit 28 set if the function is not differentiable

Token types XSLP_ROW and XSLP_COL are used only when passing formulae into Xpress NonLinear. Any formulae recovered from Xpress NonLinear will use the XSLP_CONSTRAINT and XSLP_VAR token types which always count from 1.

When a formula is passed to Xpress NonLinear in "internal unparsed format" — that is, with the formula already converted into tokens — the full range of token types is permitted.

When a formula is passed to Xpress NonLinear in "parsed format" — that is, in reverse Polish — the following rules apply:

XSLP_DEL comma is optional.
XSLP_FUN implies a following left-bracket, which is not included explicitly.
XSLP_IFUN implies a following left-bracket, which is not included explicitly.
XSLP_LB never used.
XSLP_RB only used to terminate the list of arguments to a function.

Brackets are not used in the reverse Polish representation of the formula: the order of evaluation is determined by the order of the items on the stack. Functions which need the brackets — for example XSLPgetccoef — fill in brackets as required to achieve the correct evaluation order. The result may not match the formula as originally provided.

Token type XSLP_UNKNOWN is returned by the parsing routines when a string cannot be identified as any other type of token. Token type XSLP_STRING is returned by the parsing routine where the token has been specifically identified as being a character string: the only case where this occurs at present is in the names of return arguments from user-defined multi-valued functions. The "value" field for both these token types is an index into the Xpress NonLinear string table and can be accessed using the XSLPgetstring function.