Выражения
Выражение - это комбинация операторов-свойств и параметров. При вычислении выражения последовательно в порядке приоритетов выполняются все операторы.
Значением выражения будем называть возвращаемое значение свойства, получившегося в результате выполнения операторов, либо значение параметра, если выражение являлось одиночным параметром.
Выражение можно описать набором следующих рекурсивных правил:
Правило | Описание |
---|---|
expression := parameter | constant | prefixOperator | Одиночный параметр, константа или префиксный неарифметический оператор |
expression := prefixArithmOp expression | Унарный префиксный арифметический оператор, с переданным ему в качестве операнда выражением |
expression := expression postfixOp | Унарный постфиксный оператор, с переданным ему в качестве операнда выражением |
expression := expression binaryOp expression | Бинарный оператор с переданными ем у в качестве операндов выражениями |
expression := ( expression ) | Выражение в круглых скобках |
В состав выражения не могут входить контекстно-независимые операторы-свойства.
Примеры
CLASS Team;
wins(team) = DATA INTEGER(Team);
ties(team) = DATA INTEGER(Team);
// Количество очков, полученное командой за сыгранные матчи
points(Team team) = wins(team) * 3 + ties(team);
// В данном случае выражение записано справа от знака равенства. Оно определяет новое свойство points.
// При вычислении выражения сначала выполнятся два оператора JOIN: wins(team) и ties(team), подставив
// параметр team в свойства wins и ties. Затем выполнится оператор умножения, который построит свойство,
// возвращающее число, равное произведению возвращаемого значения wins(team) и числа 3. Затем выполнится
// оператор сложения, который создаст свойство, суммирующее возвращаемые значения (wins(team) * 3) и ties(team).
// Получившееся свойство и будет являться результатом выполнения выражения.
CLASS Game;
CLASS BonusGame : Game;
// Количество очков за игру. Если игра бонусная, то 3, иначе 2.
gamePoints(Game game) = 2 (+) (1 IF game IS BonusGame);
// В данном примере порядок выполнения операторов будет такой: IS, IF, (+)