4

次の型宣言の属性文法が与えられた場合、"A, B : C;" などの任意の文字列の解析ツリーを生成し、ツリーを装飾できる必要があります。

私は通常、単純な属性文法に対して、そして属性が何であるかが明らかな場合にこれを行うことができますが、何が何であるかout_tabを解読することはできませんin_tab。はい、これは私の宿題であり、解決策を求めているのではありません。これらの属性が何を意味するのかについてのガイダンスと、私を支援するための可能な例を求めています.

decl -> ID decl_tail
    decl.t := decl_tail.t
    decl_tail.in_tab := insert(decl,in_tab, ID.n, decl_tail.t)
    decl.out_tab := decl_tail.out_tab
decl_tail -> , decl
    decl_tail.t := decl.t
    decl.in_tab := decl_tail.in_tab
    decl_tail.out_tab := decl.out_tab
decl_tail -> : ID ;
    decl_tail.t := ID.n
    decl_tail.out_tab := decl_tail.in_tab
4

1 に答える 1

3

数年後、あなたが宿題をうまく終えたことを願っています:)

あなたの運動について:

decl.tおよびdecl_tail.tType 名 ( ID.n) をコピーし、解析ツリー内の各親プロダクションに渡す合成属性です。

プロダクションdecl -> ID decl_tailに到達すると、in_tab属性は識別子と型の間の一種の関係のリストを保持します (型は明確ではありませんが、in_tabタプルのリストを想定できます(identifier; type))。この属性は継承されるため、リストは一番上のプロダクション (一番左の識別子) から作成され始め、左から右へ作成を続け、一番右の識別子で終了します。

次に、 に達した時点でリストの構築が終了するdecl_tail -> : ID;ため、合成属性 ( out_tab) を使用して、結果を開始シンボルに再度合成します。

この図は、装飾されたツリーとグラフの依存関係を描画するために私ができる最高のものでした:

ここに画像の説明を入力

青い矢印はt属性の合成、緑の矢印はinリストの作成方法、赤の矢印は結果が最初のシンボルに合成される方法です。

于 2013-10-31T04:56:31.137 に答える