私は C のような言語用のコンパイラを開発している最中で、セマンティック分析とコード生成の段階でいくつかの問題を抱えています。私の質問は次のとおりです。1) if ステートメントの場合、構文は次のとおりです。
if (expression) then
statement1;
statement2;
else
statement3;
end if;
さて、私のターゲット コードでは、go to ステートメントを含む 3 アドレス コードでなければなりません。
look something like:
if (Rx) // Rx is the register where the expression is evaluated and stored
go to X1 //for if part
X2 // for else part;
さて、私の質問は、「go to」ステートメントのアドレスをどのように生成するのですか?
2) この質問はセマンティック分析に関するものです。単一の関数のシンボル テーブルを作成して使用することができました。関数呼び出し用のシンボル テーブルを作成するために使用すべきアプローチは何ですか? 言い換えれば、異なる語彙レベルに対して?これには、何らかの形で複数のツリーが必要であることを知っています。1 つの関数に対して 1 つのツリー。しかし、プログラムの途中から別のツリーを指すにはどうすればよいのでしょうか?
私は初心者なので、提案や考えがあれば大歓迎です。