당신은 볼 때 구문 분석을 호출해서는 안됩니다 callSomething()(나는 당신이 callSomething아닌 의미한다고 가정합니다 doSomething). 차이 a및 callSomething다른 메소드 호출 중에 하나 인 방법이 정의된다.
새 정의가 표시되면 해당 정의를 추가 할 수 있는지 확인하는 것과 관련된 검사를 수행해야합니다.
- 동일한 서명으로 기능이 존재하지 않는지 확인
- 메소드 선언이 올바른 범위에서 수행되고 있는지 확인하십시오 (즉, 메소드를 다른 메소드 선언 내에 선언 할 수 있습니까?).
이러한 검사가 통과되었다고 가정하면이를지도에 추가하고 해당 방법의 내용을 확인할 수 있습니다.
와 같은 메소드 호출을 찾으면 callSomething()다음 점검을 수행해야합니다.
callSomething지도에 존재 합니까 ?
- 제대로 호출 되었습니까 (발견 된 서명과 일치하는 인수 수)?
- 인수가 유효합니까 (변수 이름을 사용하는 경우 선언 되었습니까?이 범위에서 액세스 할 수 있습니까?)?
- 어디에서 callSomething을 호출 할 수 있습니까 (비공개, 공개, 보호)?
만약 당신 callSomething()이 괜찮다면,이 시점에서 당신이하고 싶은 것은 실제로 당신이 그것에 접근하고자하는 방법에 달려 있습니다. 엄밀히 말하면,이 시점에서 그러한 호출이 괜찮다는 것을 알고 나면 추가 세부 사항으로 가지 않고 메소드 이름과 인수 만 저장할 수 있습니다. 프로그램을 실행할 때 런타임에 있어야하는 인수를 사용하여 메소드를 호출합니다.
더 나아가고 싶다면 문자열뿐만 아니라 실제 방법에 대한 링크를 저장할 수 있습니다. 이것은 더 효율적이지만 메모리를 관리해야하는 경우 혼동 될 수 있습니다. 처음에는 끈을 붙잡고있는 것이 좋습니다. 나중에 최적화를 시도 할 수 있습니다.
참고이하는 모든 당신이 당신의 프로그램에 모든 토큰을 인식하고 그들이 알고있는 수단 프로그램, lexxed 한 가정입니다 됩니다 . 그것들이 아직 서로 이해가되는지 아는 것은 아닙니다. 파싱 단계입니다. 아직 토큰이 무엇인지 모르는 경우 먼저 해당 정보를 얻는 데 중점을 두십시오.
도움이 되길 바랍니다. 프로그래머 SE에 오신 것을 환영합니다!