497
правок
Изменения
Нет описания правки
Атрибуты делятся на '''наследуемые''' и '''синтезируемые'''.
{{Определение
|definition =
}}
|style="background-color:#FFF;padding:2px 30px"| $F.val=E.val$
|}
В нашем примере видно, что $.val$ зависит только от детей, то есть синтезируемый атрибут. Результат умножителя ($MUL.res$) зависит только от атрибутов атрибутов самого умножителя ($MUL.op_1$ и $MUL.op_2$), а значит тоже является синтезируемым(аналогично с сумматором ADD).
<картинка>
Для изящности можно добавить еще одно правило $S \to E$ и действие(семантическое правило) {print(E.val)}. Тогда сразу после разбора выражения будет напечатан его результат.
Хотя всегда можно переписать синтаксически управляемое определение таким образом, чтобы использовать только синтезируемые атрибуты, зачастую более удобно и естественно воспользоваться также и наследуемыми атрибутами.
==Наследуемые атрибуты==
{{Определение
|definition =
'''Атрибут''', значение которого зависит от значений атрибутов братьев узла или атрибутов родителя, называется '''наследуемым'''.
}}
Рассмотрим пример с L-атрибутной грамматики.
==Аспекты реализации==
Расмотрим некоторые аспекты реализации на более сложном примере.