it-swarm.com.ru

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

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

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

9
user2047167

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

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

         **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 - это синтезированный атрибут.


Читать Фурттером: Грамматика атрибутов .

9
Am_I_Helpful

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

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

1
Adnan Lodhi

Давайте посмотрим на калькулятор 

ПРОИЗВОДСТВО

  1. L -> E $
  2. E -> E1 + T
  3. E -> T
  4. T -> T1 * F
  5. T -> F
  6. F -> (E)
  7. F -> число

СЕМАНТИЧЕСКИЕ ПРАВИЛА

  1. печать (E.val)
  2. E.val: = E1.val + T.val
  3. E.val: = T.val
  4. T.val: = T1.val * F.val
  5. T.val: = F. VAL
  6. F.val: = E.val
  7. F.val: = число.lexval
0
Sercan Aydın