ISPP использует C/C++-подобный синтаксис выражений. Он поддерживает простые и составные операторы, условные операторы и операторы следования. Хотя ISPP является интерпретатором, он поддерживает сокращённое вычисление булевых выражений. Он никогда не вычисляет выражение (и не вызывает какие-либо определённые пользователем функции в нём), когда правила оператора говорят, что оно не должно быть вычислено. Например, условный оператор всегда вычисляет только 2 из своих 3 операндов.
В файле сценария ISPPBuiltins.iss вы найдете множество примеров синтаксических выражений.
ISPP содержит три типа данных: void (пустой), integer (целочисленный) и string (строковый). Переменные типа void объявляются директивой define, для которой указывается только имя переменной без каких-либо значений. Такие переменные могут использоваться с директивой ifdef или в функции Defined.
Если для синтаксического анализа строк параметр "Разрешить применение необъявленных идентификаторов" отключен (это состояние по умолчанию, подробности смотрите в pragma), то возникнет ошибка, т.к. компилятор не знает, что это за переменные. В противном случае, они будут обработаны как пустые (тип void), т.е. не имеющие никаких значений.
В выражениях тип void хорошо совместим с целочисленными (integer) и строковыми (string) типами данных. Например, вы можете запросто сложить два операнда, один из которых является integer, в другой — void. В этом случае пустой операнд будет обработан как ноль (целое число 0). Если же операции выполняются над string, операнд void будет обработан как пустая строка.
Операторы сравнения строк нечувствительны к регистру.
Для облегчения чтения и понимания текста сценария, вы можете писать комментарии. Покажем вам основные принципы ввода комментариев и символы, которые при этом можно использовать. Посмотрите на следующий пример, используя косую черту ( / ) и звездочку ( * ) можно внедрить комментарий в выражение:
#emit Var1 /* это комментарий */ + Var2 /* и это тоже комментарий */
Комментарии могут быть размещены в конце выражения с использованием точки с запятой ( ; ). Например:
#emit Var1 + Var2 ; это комментарий
Если текст комментария очень большой, то используя символ разделения строк — обратная косая черта ( \ ) — его можно разбить на несколько строк. Например:
#emit Var1 + Var2 ; здесь находится текст \ очень длинного комментария :)
Комментарии также можно разместить в любом месте с начала строки, используя двойную косую черту ( // ). Например:
// Это комментарий
Все комментарии, показанные выше, не включаются в данные вывода препроцессора, в отличие от комментариев (не ISPP), использующих точку с запятой в начале строки. Например:
#emit Var1 + Var2 ; этого комментария на выходе препроцессора НЕ будет // Этого комментария тоже НЕ будет ; А вот этот комментарий БУДЕТ
В ISPP имеется возможность использования именованных параметров при вызове функций, определённых пользователем. Например, выполним объявление функции MyFunction:
#define MyFunction(int A = 2, int B = 2) A + B
Теперь выполним вызов этой функции и укажем имена параметров:
#emit MyFunction(A = 5, B = 10) #emit MyFunction(B = 3) #emit MyFunction(B = 10, A = 5)
#emit MyFunction((MyVar = 5), 10)
#emit MyFunction((SaveToFile("script.txt"), 5), 10)