2016-12-06 5 views
1

저는 C와 비슷한 간단한 언어로 컴파일러를 작성하고 있습니다. , foo가 해결되지 않은 경우"유형 확인"단계에서 처리 할 수 ​​있습니까?

struct Foo { 
    char* name; 
}; 
struct Foo foo; 
char* blah = foo.name; 

특히,이 분석은 처리 할, 또는 name가 해결되지 않은 경우 등 두 가지 방법으로 나는이 이름 확인 함께 접근 : 나는 다음과 같은 예를 들어 분석을 할 노력하고있어 즉 foo이 있고, namefoo에 존재하는지 확인하십시오. 그런 다음 '유형 확인'이 있는데, 여기에서 Foo 구조가 있는지 확인합니다.

첫 번째 질문 :

  • 오전 내가 "푸"구조가 존재하는 경우 유형 해상도 패스를 확인 할이 권리를 얻는? 나는이 방법에 약간의 문제가 있기 때문에

나는이를 부탁드립니다. 형식 확인 전에 이름 확인이 수행되었으므로 구조체 Foo이 아직 해결되지 않았기 때문에 foo.name을 확인할 수 없으므로 형식, 필드 형식 등은 알 수 없습니다.

  • 이름 확인 전후에 형식 확인을 수행합니까?

내가 유형 해결하기 전에 이름 확인 할 경우 : 나는 이름 확인의 유형에 대해 알아야 할 곳

  • 은 어떻게 문제를 접근합니까?

답변

1

과거에 취한 접근법은 범위 해상도가있는 유형 확인을 단일 통과로 병합하는 것입니다.

당신은 두 가지 환경을 구축해야합니다

/테이블 (유형 중 하나와 이름 하나).

그렇게 char* blah = foo.name에서, 당신은 당신의 유형 테이블에서, 당신은 필드 name와 구조체로 Foo이있을 것이다, Foo의 유형과 이름 테이블에 foo이있을 것이다. 그런 다음 필드 액세스 foo.name이 유효한지 확인할 수 있습니다. 이는 foo이 선언되어 있고 foo의 유형이 .name 인 필드가 있음을 의미합니다.