2016-10-12 4 views
1

아래 코드에서는 각 범위에 대한 기호 테이블을 그려야합니다. 범위는 전역, f1, else 및 f2입니다. f2의 경우 x가 해당 기호로 간주되는지 궁금합니다. 범위. 또한, (5) 모든 심볼 테이블로 F1 관련됩니까?기호 테이블 및 범위

int x = 3; 
int f1(int x) { 
    if (x > 4) 
     f1(x-1); 
    else { 
     int x = 1; f2(); 
    } 
} 
int f2() { 
    print x; 
} 
f1(5); 

답변

1

범위 지정 및 변수 선언에 대한 몇 가지 일반적인 가정에 대한 작업.

  1. 을하지 등. 기호가 아니라 x 만 사용하기 때문에 심볼 테이블에 b가 추가되지 않습니다. e를 테이블에 추가했습니다. 그래서 질문의 종류가 이해가되지 않습니다. 컴파일러는 심볼 x을 사용하고 심볼 테이블에서 찾아 볼 것입니다. 전역 범위의 x으로 발견됩니다.

  2. f1(5)은 실제로 어떤 기호 테이블에도 연결되어 있지 않습니다. 함수 호출을하기 때문에 f1을 찾아서 존재하는지 (그리고 매개 변수 번호/유형이 일치하는지) 확인해야합니다. 사용하기 전에 이미 정의되었으므로 전역 범위의 기호 표에서 f1을 찾을 수 있습니다. 또한이 지점의 코드에는 전역이 하나 뿐이지 만보기에는 하나의 표가 있습니다. 따라서 f1(5)은 기호 테이블에 f1 기호와 매개 변수 정보가 있다는 사실에서만 관련이 있습니다.