0

small-c から p-code へのコンパイラを数週間で完成させる必要がありますが、シンボル テーブルの作成方法とそれに続くコード生成フェーズを理解するのに本当に苦労しています。どこから始めればよいでしょうか。いくつかの例を見てきましたが、概念全体がよくわかりません。

添付の文法でわかるように、多くの書き直し規則が使用されており、文法は実際には非常に長く、残念ながら必要のない部分を省略した YACC 文法から導出するのにかなりの時間がかかりましたが、この時点で私は後でコード生成を考え出すときにこれが影響するかどうかはわかりません。

アドバイス/ヒントは大歓迎です、ありがとう。

4

1 に答える 1

1

これは非常に幅広い質問であり、全体として回答するのは困難です。大きなタスクを小さなサブタスクに分割し、ここでそれらについて質問する必要があります。

一般的な考え方として、あなたの言語には、識別子 (LHS) に値を割り当てるルールと、単純な代入 (RHS) を含む式の識別子を取るルールがあります。これらは、シンボル テーブルに収集する必要があるシンボルです。型や変数の定義など、さらに多くのシンボルが存在する場合があります。構文ツリーにすべてが含まれています。次のように、識別子の種類ごとに (独自のトークンの種類を使用して) 独自の規則を持つように文法規則を定義することで、生活を楽にすることができます。

variable_name:
    identifier -> ^(VARIABLE_NAME identifier)
;

typedef_name:
    identifier -> ^(TYPEDEF_NAME identifier)
;

など。このようにして、シンボル テーブルに関連するトークンを簡単に特定できます。次に、構文ツリーをたどって特別なトークンからテキストを取得するだけで済みます。これは単純な深さ優先検索です。

于 2014-07-03T07:35:10.357 に答える