Старшинство операций
Старшинство операций
Теперь, когда мы изучили все типы операций XPath, можно дать синтаксическое определение выражению и выстроить все операции в порядке старшинства.
Выражению, как самой общей конструкции XPath, соответствует продукция Expr, которая определяется следующим образом:
[XP14] Expr ::= OrExpr
То есть, фактически, выражение в XPath определяется через логическое выражение. Естественно, выражения не обязаны быть логическими. Просто в иерархии синтаксических правил логическое выражение "или" находится выше всего. Верхние правила определяются через более примитивные правила и так далее. В итоге иерархия выражений выстраивается следующим образом (в скобках приведены названия EBNF-правил):
? выражения (Expr);
? логические выражения "или" (OrExpr);
? логические выражения "и" (AndExpr);
? выражения равенства и неравенства (EqualityExpr);
? выражения сравнения (RelationalExpr);
? выражения сложения и вычитания (AdditiveExpr);
? выражения умножения и деления (MultiplicativeExpr);
? унарные выражения (UnaryExpr);
? выражения объединения множеств (UnionExpr);
? выражения путей выборки (PathExpr);
? пути выборки (LocationPath), фильтрация множеств (FilterExpr), относительные пути выборки (RelativeLocationPath).
По этой схеме несложно выяснить старшинство операций — чем ниже выражение находится в этой иерархии, тем выше его приоритет. Для полной ясности, перечислим операции в порядке старшинства от старших, с большим приоритетом, к младшим, с меньшим приоритетом выполнения:
? операции с путями выборки;
? операция объединения множеств (|);
? унарная операция отрицания (-);
? умножение, деление и вычисление остатка от деления (*, div и mod);
? операции сложения и вычитания (+ и -);
? операции сравнения (<, >, <=, =>);
? операции проверки равенства и неравенства (= и !=);
? операция "и" (and);
? операция "или" (or).
Операции одного порядка имеют левую ассоциативность, как это было показано на примере с операциями сравнения (3 > 2 > 1 равносильно (3 > 2) >1).