Добавлен , опубликован

JASS - Just Another Scripting Syntax

Содержание:

Переезд

Начат переезд на новый движок документации. Актуальная статья находится здесь.
Приоритет Ассоциативность Оператор Описание Пример
1 Левая [] Доступ к индексу a[b]
1 Левая () Вызов функции a(b)
1 Левая () Скобки (a + b) * c
2 Правая not Логическое НЕ not a
2 Правая - Математическая смена знака -a
3 Левая * Умножение a*b
3 Левая / Деление a/b
3 Левая % Модуль (оставшаяся часть от деления) (только Reforged) a%b
4 Левая + Сложение a+b
4 Левая - Вычитание a-b
5 Левая Меньше a<b
5 Левая > Больше a>b
5 Левая <= Меньше или равно a<=b
5 Левая >= Больше или равно a>=b
6 Левая == Равно a==b
6 Левая != Не равно a!=b
7 Левая and Логическое И a and b
8 Левая or Логическое ИЛИ a or b
9 Правая = Присваивание a=b
10 Левая , Перечисление a,b

Ассоциативность

Определяет направление разбора выражения.
  • Левая: слева направо
  • Правая: справа налево
Для примера возьмём правостороннее присваивание с левосторонним сложением:
a = b = c + d + e
Чтоб не вдаваться в подробности, представим что компилятор под капотом заведёт переменную x для промежуточных вычислений и тогда порядок будет таким:
x = c + d
x = x + e
b = x
a = b
Для любителей байткода выражение будет выглядеть так:
ASSIGN(a, ASSIGN(b, ADD(ADD(c, d), e)))

Приоритет

Операции выполняются не слева на право, а следуя приоритету. Чем меньше значение в таблице тем приоритет считается выше, тобишь операция выполнится раньше других. Для операций с одинаковым приоритетом операции будут выполняться в порядке, заданном ассоциативностью.
Возьмём операции с разным приоритетом, например присваивание, умножение и сложение:
a = b + c * d
Вспомнив про переменную x из прошлого абзаца, запишем порядок выполнения:
x = c * d
x = b + x
a = x
Так же не забудем про любителей байткода:
ASSIGN(a, ADD(b, MUL(c, d)))

`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.