Вы не должны вызывать parse при просмотре callSomething()
(я полагаю, вы имели в виду, callSomething
а не doSomething
). Разница между a
и callSomething
заключается в том, что один является определением метода, а другой - вызовом метода.
Когда вы увидите новое определение, вы захотите выполнить проверки, связанные с тем, чтобы убедиться, что вы можете добавить это определение, поэтому:
- Проверьте, не существует ли функция с такой же подписью
- Убедитесь, что объявление метода выполняется в надлежащей области (т. Е. Могут ли методы быть объявлены внутри других объявлений метода?)
Предполагая, что эти проверки пройдены, вы можете добавить их на свою карту и начать проверку содержимого этого метода.
Когда вы находите вызов метода как callSomething()
, вы должны выполнить следующие проверки:
- Существует ли
callSomething
на вашей карте?
- Правильно ли он вызывается (количество аргументов соответствует найденной вами подписи)?
- Являются ли аргументы действительными (если имена переменных используются, они объявлены? Можно ли получить к ним доступ в этой области?)?
- Можно ли вызвать что-то из того места, где вы находитесь (приватно, публично, защищено?)?
Если вы обнаружите, что callSomething()
это нормально, то в данный момент то, что вы хотели бы сделать, зависит от того, как вы хотите к нему подойти. Строго говоря, если вы знаете, что такой вызов в данный момент подходит, вы можете только сохранить имя метода и аргументы, не вдаваясь в подробности. Когда вы запустите свою программу, вы вызовете метод с аргументами, которые вы должны иметь во время выполнения.
Если вы хотите пойти дальше, вы можете сохранить не только строку, но и ссылку на фактический метод. Это было бы более эффективно, но если вам нужно управлять памятью, это может сбить с толку. Я бы порекомендовал вам просто держаться за строку сначала. Позже вы можете попытаться оптимизировать.
Обратите внимание, что все это предполагает, что вы выполнили лексизм в своей программе, что означает, что вы распознаете все токены в своей программе и знаете, что они собой представляют . Это не значит, что вы знаете, имеют ли они смысл вместе, что является фазой анализа. Если вы еще не знаете, что такое токены, я советую вам сначала сосредоточиться на получении этой информации.
Надеюсь, это поможет! Добро пожаловать в Программисты SE!