на главную | войти | регистрация | DMCA | контакты | справка | donate |      

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Э Ю Я


моя полка | жанры | рекомендуем | рейтинг книг | рейтинг авторов | впечатления | новое | форум | сборники | читалки | авторам | добавить



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

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


Пример | Технология XSLT | Функции