Синтезированные vs унаследованные атрибуты

Как я могу найти, синтезирован ли атрибут или унаследован от произведений грамматики?

Я думаю, что для этого атрибут должен быть предопределен в задаче - если его значение зависит от дочерних или родительских узлов. Но есть ли способ проанализировать, наследуется ли атрибут или синтезируется из грамматических произведений.

2 ответов


Синтезируемого Атрибута: атрибут, который получает свои значения из атрибутов привязаны к детям своего терминала.

Унаследованный Атрибут: атрибут, который получает свои значения из атрибутов, прикрепленных к родительскому (или братьям и сестрам) своего не-терминала.

         **PRODUCTION**                             **SEMANTIC RULES**

             T->FT’                                    T’.inh=F.val
                                                       T.val=T’.syn

           T’->*FT1’                              T1’.inh=T’.inh*F.val
                                                      T’.syn=T1’.syn

             T’->Ɛ                                    T’.syn=T’.inh

             F->id                                   F.val=id.lexval

Как вы можете видеть из данной грамматики(производств), inh является наследуемым атрибутом, а syn-синтезированным атрибут.


Furtter Читать: Атрибут Грамматик.


атрибут, который принимает значения данных из своих дочерних узлов, называется синтезированным атрибутом.

Они также называются s-атрибутивным производством. Атрибут, который принимает значения от родителей или узлов-братьев, называется унаследованными атрибутами. Производственное правило, имеющее унаследованный атрибут (каждый унаследованный атрибут ограничен наследованием только от родителя или левого брата), называется производствами с L-атрибутом.