C#のコンパイラの設計 - 前方参照
-
11-09-2019 - |
質問
C#などの前方参照言語では、どのようにコンパイラはこれを処理しますか?コンパイラが動作する手順を教えてください。
解決
前方参照を可能にするかどうかの主な違いは、ワンパスコンパイラまたはマルチパスのいずれかを使用しています。もちろん、あなたがシンボルの定義をチェックしなければならず、を使用すると、コンパイルされたソースの完全な抽象構文木を生成した後にします。
を型チェックします参照前方に処理します 問題はありませんので、は、あなたが最初にあなたはそれが後で定義されることに依存している前方参照を見つけたとき、あなたが実際の定義を見つけたとき、あなたがシンボルで、シンボルオブジェクトを絞り込む(あなたは、シンボルテーブルに保留中としてマークすることができます)テーブルます。
は、あなたがそれをです。TypeCheckや一部の記号がまだ保留されているかどうかを確認することができた後(これは本当の定義はない、とあなたはセマンティックエラーを発生させることができます)..
他のヒント
これは、コンパイルの2回のパスを行うことによってこれを行います。最初のパスは、コードを解析し、使用するすべての識別子を収集します。第2のパスがすべての識別子を解決します。
識別子のタイプは、それが解決される前に知らなければならないように、シングルパスコンパイラで言語では、パスカルのように、唯一の後方参照を使用することができる。
全く同じ方法C ++は、唯一の違いは、私が思うに、それを処理します。構文は、コンパイラがまだ宣言されていないシンボルが参照構文オブジェクトの種類を伝えるためにあなたを必要とせずに解析木を構築することができることは十分に簡単です。
所属していません StackOverflow