Path Mapper (Сопоставитель Пути)


Выполняет лексические операции над деревьями данных. Лексические операции — это операции логического сопоставления между путями данных (data paths) и индексами (indices), определяемого текстовыми (лексуальными) масками (masks) и шаблонами (patterns). Например, Вы могли бы определить лексическое правило, как "Take the original path but ignore the last index" (Использовать оригинальный путь, но игнорировать последний индекс), используя английский язык. Это было бы очень читабельным для человека, но не для компьютера. Так как мы — умные, то справедливо, что именно мы можем адаптироваться.

Лексические же правила должны придерживаться очень специфических ограничений синтаксиса:

  1. Маска (mask) должна содержать один (и только один) сегмент пути (path segment).
  2. Сегмент пути должен состоять, как минимум, из одного элемента.
  3. Маска может содержать не более одного сегмента элемента.
  4. Сегмент элемента должен состоять точно из одного элемента.
  5. Сегменты пути элементов должны быть отделены точкой с запятой.
  6. Сегменты пути элементов должны быть заключены в фигурные скобки.
  7. Сегмент элемента должен быть заключен в круглые скобки.
  8. Любые метки-заполнители переменных могут быть определены только один раз.
Кроме того, действительно ли Лексическую Маску (Lexical Mask) считают валидной, зависит от того, где она используется. Если маска используется для создания лексического шаблона (lexical pattern), (т. е. маски источника (source mask)), то Вам разрешается использовать метки-заполнители (placeholders) для пути и индексов элементов. Однако, если маска используется, чтобы видоизменить лексический шаблон, (то есть целевую маску (target mask)), тогда каждый элемент может быть записан в форме постоянного числа (constant number), метки-заполнителя или выражения (expression).

Ниже приведены все допустимые маски источника (source mask):

Валидные Маски Источника (Valid Source Masks)

{A}

{A;B}(i)

{first;second}(index)



В вышеприведённой таблице "A", "B", "i", "first", "second" и "index" - все являются метками-заполнителями (placeholders). Метки-заполнители — это имена, определяемые при написании шаблона. Имена меток-заполнителей должны соответствовать тем же правилам, что и имена переменных (variable) в выражениях (expression) Grasshopper. Когда сегмент элемента опущен (как в первом примере), все элементы в соответствующих ветвях будут применены к результирующим.

Некорректные Маски Источника (Invalid Source Masks)

{}(i)

{A;}(i)

{first;second}{i}



Первая маска недействительна, потому что не определяет элементов пути, вторая маска некорректна потому, что, при наличии нестандартной точки с запятой и третьей маски, она использует фигурные скобки для сегмента элемента вместо круглой скобки.

Целевые Маски (Target Masks) являются более гибкими, так как они скорее оценочные, чем описательные. С учетом приведённых выше валидных Масок Источника (valid Source Masks), все эти Целевые Маски (Target Masks) тоже были бы корректными:

Целевые Маски (Target Masks)

{0}

{i}(B)

{10*first+second}(index)



При использовании в логическом умножении, первая маска Источника и первая маска Цели соберут в дерево данных все ветви, которые имеют только единственный индекс и сгладят их в одну ветвь с путём {0}.

Вторые маски Источника и Цели комбинирует две операции, а именно, удаляет первую часть пути ("A", который не представлен в целевой маске и поэтому исчезает), и инвертирует индексы элементов и пути. Эти комбинация масок «переворачивает» матрицу данных вдоль диагонали.




Замечания: