Skip to end of metadata
Go to start of metadata

Выражение - это комбинация операторов-свойств и параметров. При вычислении выражения последовательно в порядке приоритетов выполняются все операторы.

Значением выражения будем называть возвращаемое значение свойства, получившегося в результате выполнения операторов, либо значение параметра, если выражение являлось одиночным параметром.

Выражение можно описать набором следующих рекурсивных правил:

ПравилоОписание
expression := parameter | constant | prefixOperator
Одиночный параметр, константа или префиксный неарифметический оператор
expression := prefixArithmOp expression
Унарный префиксный арифметический оператор, с переданным ему в качестве операнда выражением
expression := expression postfixOp
Унарный постфиксный оператор, с переданным ему в качестве операнда выражением
expression := expression binaryOp expression
Бинарный оператор с переданными ему в качестве операндов выражениями
expression := ( expression )
Выражение в круглых скобках

В состав выражения не могут входить контекстно-независимые операторы-свойства.

Примеры

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
 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;
  
gamePoints(Game game) = 2 (+) (1 IF game IS BonusGame); // Количество очков за игру. Если игра бонусная, то 3, иначе 2.
// В данном примере порядок выполнения операторов будет такой: IS, IF, (+)

  • No labels