あなたが見たときに解析を呼び出すべきではありませんcallSomething()
(私はあなたcallSomething
よりもむしろあなたが意図したと思いますdoSomething
)。差a
とはcallSomething
、他のメソッドの呼び出しで、一方のメソッドの定義であることです。
新しい定義が表示されたら、その定義を追加できることを確認することに関連するチェックを実行する必要があります。
- 同じ署名の関数がまだ存在していないか確認してください
- メソッド宣言が適切なスコープで実行されていることを確認します(つまり、メソッドは他のメソッド宣言内で宣言できますか?)
これらのチェックに合格すると仮定して、マップに追加し、そのメソッドのコンテンツのチェックを開始できます。
のようなメソッド呼び出しが見つかったらcallSomething()
、次のチェックを実行する必要があります。
callSomething
あなたのマップに存在しますか?
- 適切に呼び出されていますか(引数の数は、見つかった署名と一致します)?
- 引数は有効ですか(変数名が使用されている場合、宣言されていますか?このスコープでアクセスできますか?)?
- callSomethingはあなたがいる場所から呼び出すことができますか(プライベート、パブリック、保護されていますか?)
それcallSomething()
が大丈夫だとわかった場合、この時点であなたが本当にやりたいことはあなたがそれにどのようにアプローチしたいかに依存します。厳密に言えば、この時点でそのような呼び出しが問題ないことがわかったら、詳細を説明せずにメソッド名と引数のみを保存できます。プログラムを実行すると、実行時に必要な引数でメソッドを呼び出します。
さらに先に進みたい場合は、文字列だけでなく、実際のメソッドへのリンクを保存できます。これはより効率的ですが、メモリを管理する必要がある場合、混乱する可能性があります。最初は単に文字列を保持することをお勧めします。後で最適化を試みることができます。
これはすべて、プログラムを字句解析したことを前提としていることに注意してください。つまり、プログラム内のすべてのトークンを認識し、それらが何であるかを知っています。それは、それらがまだ一緒に意味をなすかどうかをあなたが知っていると言うことではありません、それは構文解析段階です。トークンが何であるかまだわからない場合は、まずその情報を取得することに集中することをお勧めします。
それがお役に立てば幸いです!Programmers SEへようこそ!