Книга: Технология XSLT

Старшинство операций

Старшинство операций

Теперь, когда мы изучили все типы операций 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).

Оглавление книги


Генерация: 1.193. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз