문제

C#과 같은 전방 참조 언어에서 컴파일러는 어떻게 처리합니까? 컴파일러가 작동하는 단계는 무엇입니까?

도움이 되었습니까?

해결책

전방 참조 허용의 주요 차이점은 하나의 패스 컴파일러 또는 멀티 패스 하나. 물론 앞으로 참조를 처리하려면 기호 정의를 확인하고 타이치 체크를 수행해야합니다. 후에 컴파일중인 소스의 전체 초록 구문 트리를 생성 한 후.

따라서 문제가 없습니다. 먼저 앞쪽 참조를 찾으면 나중에 정의 될 것이라고 의존합니다 (심볼 테이블에서 보류중인 것으로 표시 할 수 있음) 실제 정의를 찾으면 기호 테이블에서 기호 객체를 개선합니다.

당신이 그것을 타이핑하거나 일부 기호가 아직 보류 중인지 확인한 후에 (따라서 실제 정의가없고 의미 론적 오류를 제기 할 수 있음) ..

다른 팁

두 번의 편집 패스를 수행하여이를 수행합니다. 첫 번째 패스는 코드를 구문 분석하고 사용 된 모든 식별자를 수집합니다. 두 번째 패스는 모든 식별자를 해결합니다.

Pascal과 같은 단일 패스 컴파일러가있는 언어에서는 분해되기 전에 식별자의 유형을 알고 있어야하므로 뒤로 참조 만 사용할 수 있습니다.

정확히 C ++가 처리하는 것과 같은 방식으로, 차이점 만 생각합니다. 구문은 컴파일러가 아직 선언되지 않은 심볼이 어떤 종류의 구문을 말하는지 알려줄 필요없이 소문자 트리를 구성 할 수있을 정도로 간단합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top