属性が文法の生成から合成または継承されているかどうかを確認するにはどうすればよいですか?
属性が問題で事前定義されている必要があると思います-その値が子ノードまたは親ノードに依存する場合。しかし、属性が文法プロダクションから継承または合成されているかどうかを分析する方法はありますか。
合成属性:非終端の子に接続された属性から値を取得する属性。
継承された属性:非端末の親(または兄弟)にアタッチされた属性から値を取得する属性。
**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は合成された属性です。
さらに読む: 属性文法 。
子ノードからデータ値を取得する属性は、合成属性と呼ばれます。
これらはs属性プロダクションとも呼ばれます。親または兄弟ノードから値を取得する属性は、継承属性と呼ばれます。継承された属性を持つプロダクションルール(継承された各属性は、親または左兄弟からの継承のみに制限されています)は、L属性プロダクションと呼ばれます。
電卓を見てみましょう