Приоритет оператора маневрового двора (обратная польская запись / постфикс)
Я пытаюсь выяснить, каков приоритет для разных операторов при реализации алгоритма закрывания.
Мое абстрактное синтаксическое дерево написано в инфиксе, и я оцениваю его с помощью алгоритма закрытия. Это прекрасно работает для арифметических операторов. Проблема, с которой я сталкиваюсь, заключается в том, что я не знаю, какой приоритет имеют все остальные операторы.
Из https://en.wikipedia.org/wiki/Shunting-yard_algorithm я вижу, что для этих операторов верно следующее. Число является приоритетом.
^ 4
* 3
/ 3
+ 2
− 2
Но я не могу найти ничего, что описывает прецедент для реляционных и логических операторов? Я много искал ответ.
Может кто-нибудь дать мне полную картину прецедента для всех этих операторов:
a. Function call
b. (
c. ,
d. +, -
e. *, /
f. ^
g. =, <>, <, <=, >, >=
h. NOT
i. AND
j. OR
Заранее спасибо.
/Брайан
1 ответ
Взгляните на формы ввода операторов Mathematica, в которых показаны формы ввода операторов в порядке убывания приоритета. Операторы одинакового приоритета сгруппированы вместе.
Вы можете определить "приоритет" как это в Mathematica:
Precedence[Power] gives 590
Precedence[Times] gives 400
Precedence[Plus] gives 310
Precedence[Equal] gives 290
Precedence[Not] gives 230
Precedence[And] gives 215
Precedence[Or] gives 215