web-dev-qa-db-ja.com

合成された属性と継承された属性

属性が文法の生成から合成または継承されているかどうかを確認するにはどうすればよいですか?

属性が問題で事前定義されている必要があると思います-その値が子ノードまたは親ノードに依存する場合。しかし、属性が文法プロダクションから継承または合成されているかどうかを分析する方法はありますか。

10
user2047167

合成属性:非終端の子に接続された属性から値を取得する属性。

継承された属性:非端末の親(または兄弟)にアタッチされた属性から値を取得する属性。

         **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. print(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:= number.lexval
0
Sercan Aydın