4194
правки
Glk (обсуждение | вклад) (Создана новая страница размером '''Атрибутное вычисление''' (''Attribute evaluation'') - эффективность использования ''ат...) |
KEV (обсуждение | вклад) Нет описания правки |
||
Строка 1: | Строка 1: | ||
'''Атрибутное вычисление''' (''Attribute evaluation'') - | '''Атрибутное вычисление''' (''[[Attribute evaluation]]'') - эффективность использования [[атрибутная грамматика|''атрибутных грамматик'']] во многом зависит от способа решения задачи '''А.в.''' --- нахождения значений атрибутов <math>W(t)</math> для [[атрибутное дерево|''атрибутного дерева'']] <math>t</math> заданной атрибутной грамматики. Первый шаг, | ||
эффективность использования ''атрибутных грамматик'' во | который нужно при этом сделать, состоит в определении ''порядка'' (''плана'' или ''стратегии'') ''вычисления'' --- такого линейного порядка <math>T(t)</math> на <math>W(t)</math>, который не | ||
многом зависит от способа решения задачи '''А.в.''' --- | противоречит [[графу зависимости атрибутов]] [[дерево|дерева]] <math>t</math>. В | ||
нахождения значений атрибутов <math>W(t)</math> для ''атрибутного | случае, когда [[грамматика]] ''[[корректная атрибутная грамматика|корректна]]'', указанная задача | ||
дерева'' <math>t</math> заданной атрибутной грамматики. Первый шаг, | для заданного <math>t</math> является задачей [[топологическая сортировка|''топологической сортировки'']], допускающей эффективное решение. | ||
который нужно при этом сделать, состоит в определении | |||
порядка | |||
--- такого линейного порядка <math>T(t)</math> на <math>W(t)</math>, который не | |||
противоречит графу зависимости атрибутов дерева <math>t</math>. В | |||
случае, когда грамматика ''корректна'', указанная задача | |||
для заданного <math>t</math> является задачей ''топологической | |||
сортировки'', допускающей эффективное решение. | |||
Алгоритм заполнения атрибутных деревьев может предполагать, | [[Алгоритм]] заполнения атрибутных деревьев может предполагать, что выбор стратегии заполнения и собственно вычисление по этой стратегии осуществляются ''динамически'', во время работы транслятора, построенного с помощью атрибутной грамматики, либо ''статически'', т.е. до работы | ||
что выбор стратегии заполнения и собственно вычисление по | транслятора. Они могут быть как ''детерминированными'', так и ''недетерминированными'', предполагающими произвольный порядок вычисления значений ''активных'' (т.е. тех, которые могут быть вычислены в данный момент) вхождений атрибутов в атрибутное дерево. Условия задержки | ||
этой стратегии осуществляются ''динамически'', во время | (соответственно активации) вхождения атрибута определяются отсутствием (соответственно наличием) значений аргументов семантического правила, вычисляющего значение данного вхождения атрибута. Таким образом, если ''граф зависимости атрибутов'' дерева ациклический, то, начиная с присваивания константного значения некоторому атрибуту, не имеющему заходящих [[дуга|дуг]] в [[граф|графе]] зависимостей, может происходить заполнение всего атрибутного дерева в порядке, зависящем от предыдущих вычислений. | ||
работы транслятора, построенного с помощью атрибутной | |||
грамматики, либо ''статически'', т.е. до работы | |||
транслятора. Они могут быть как ''детерминированными'', | |||
так и ''недетерминированными'', предполагающими | |||
произвольный порядок вычисления значений ''активных'' | |||
(т.е. тех, которые могут быть вычислены в данный момент) | |||
вхождений атрибутов в атрибутное дерево. Условия задержки | |||
(соответственно активации) вхождения атрибута определяются | |||
отсутствием (соответственно наличием) значений аргументов | |||
семантического правила, вычисляющего значение данного | |||
вхождения атрибута. Таким образом, если ''граф | |||
зависимости атрибутов'' дерева ациклический, то, начиная с | |||
присваивания константного значения некоторому атрибуту, не | |||
имеющему заходящих дуг в графе зависимостей, может | |||
происходить заполнение всего атрибутного дерева в порядке, | |||
зависящем от предыдущих вычислений. | |||
Детерминированные алгоритмы, в которых порядок заполнения | Детерминированные алгоритмы, в которых порядок заполнения атрибутного дерева фиксируется до начала вычисления атрибутов, разделяются на алгоритмы ''с жесткой стратегией'', в которых порядок заполнения один и тот же для всех атрибутных деревьев, и алгоритмы ''с гибкой стратегией'', в которых порядок заполнения определяется для конкретного атрибутного дерева. | ||
атрибутного дерева фиксируется до начала вычисления | |||
атрибутов, разделяются на алгоритмы ''с жесткой | |||
стратегией'', в которых порядок заполнения один и тот же для | |||
всех атрибутных деревьев, и алгоритмы ''с гибкой | |||
стратегией'', в которых порядок заполнения определяется для | |||
конкретного атрибутного дерева. | |||
После того как план вычисления <math>T(t)</math> найден, возможны два | После того как план вычисления <math>T(t)</math> найден, возможны два варианта его использования: вычислять, начиная с минимальных элементов, либо от максимальных элементов в отношении. | ||
варианта его использования: вычислять, начиная с минимальных | Вычислители первого типа называются ''восходящими'' (''снизу вверх'' или ''управляемыми данными''), а второго --- ''нисходящими'' (''сверху вниз'' или ''управляемыми | ||
элементов, либо от максимальных элементов в отношении. | |||
Вычислители первого типа называются ''восходящими'' | |||
(''снизу вверх'' или ''управляемыми данными''), а второго --- | |||
''нисходящими'' (''сверху вниз'' или ''управляемыми | |||
запросами''). | запросами''). | ||
==Литература== | ==Литература== | ||
[Евстигнеев-Касьянов/98] | [Евстигнеев-Касьянов/98] |