私の言語では、定義がメソッドの下に表示されるときに、メソッドでクラス変数を使用できます。また、自分のメソッドなどの下のメソッドを呼び出すこともできます。「ヘッダー」はありません。この C# の例を見てみましょう。
class A
{
public void callMethods() { print(); B b; b.notYetSeen();
public void print() { Console.Write("v = {0}", v); }
int v=9;
}
class B
{
public void notYetSeen() { Console.Write("notYetSeen()\n"); }
}
それをどのようにコンパイルすればよいですか?私が考えていたのは:
- pass1: すべてを AST に変換します
- pass2: すべてのクラスを調べて、define classes/variable/etc のリストを作成します。
- pass3: コードを調べて、未定義の変数、間違った使用などのエラーがあるかどうかを確認し、出力を作成します
しかし、これが機能するように思えます.pass3を実行する前に、すべてのファイルに対してpass 1と2を実行する必要があります. また、構文エラーが見つかるまで、やるべきことがたくさんあるように感じます (ブレースを閉じるのを忘れたり、16 進値の代わりに 0xLETTERS を書き込んだりするなど、解析時に実行できる明らかなエラーを除きます)。私の腸は、他の方法があると言っています。
注: bison/flex を使用してコンパイラを生成しています。