誰かが私に、現時点で正しいセマンティックアクションを実行できるようにするためにさらなる宣言を調べる必要がある状況に対処する方法についてのアドバイス/アイデアを教えてもらえますか?たとえば、誰かが「前方宣言」をサポートしていないプログラミング言語のインタプリタ/コンパイラを作成する場合によく知られています。例を見てみましょう:
foo(123);//<-- our parser targets here. we estimate we have a function
// invocation, but we have no idea about foo declaration/prototype,
// so we can't be sure that "foo" takes one integer argument.
void foo(int i){
//...
}
少なくとも2つのパスが必要であることは明らかです。まず、すべての関数宣言を解析し、関数が取る引数の量、それらの型などの必要なすべての情報を取得します。次に、関数の呼び出しを処理し、上記のように問題を解決できます。このように進む場合は、いくつかのASTトラバースメカニズム/ビジターを使用してこれらすべてのパスを実行する必要があります。この場合、ASTのトラバース/アプライビジターに対処する必要があり、パーサーに直接統合されたフェニックス構造のすべての美しさに「さようなら」と言わなければなりません。
これにどのように対処しますか?