나는 내 기호 테이블 &을 구현하는 논리를 파악하려고 노력하는 뇌를 깨뜨리고 있었는데 이제는 흰색 깃발을 흔들며 도움을 요청합니다. 벡터를 사용하여 심볼 테이블을 만들지 만 올바른 범위에 심볼 테이블 항목 (지금은 문자열, 나중에 구조체)을 넣는 데 문제가 있습니다. 내 코드는 블록이 열릴 때마다 증가하고 블록이 닫힐 때마다 감소하는 int scopenum
을가집니다. 그러나이 행은 범위 3에 있어야 할 때 범위 2에 q를 넣기 때문에 {a {b} {q}}이므로 문제가됩니다. 코드가 새 행을 벡터에 푸시하지만 사용하지 않습니다 삽입물에. & 클로징 범위를 올바르게 계산하도록 코드를 수정하려면 어떻게해야합니까?벡터를 사용하는 기호 테이블
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
int stacknum=-1;
vector< vector<string> > v;
void display(){
for(int i=0; i<v.size(); i++){
cout << "Scope " << i+1 << ": " << endl;
for(int j=0; j<v[i].size(); j++)
cout << v[i][j] << endl;
cout << endl;
}
}
void insert(string s){
v[stacknum].push_back(s);
}
int main(){
string data;
ifstream file;
file.open("input");
if(!file.is_open()) {
cout << "Input file not found";
return 1; }
while(file >> data){
if(data=="{"){
stacknum++;
vector<string> row;
v.push_back(row);
continue;
}
if(data=="}"){
stacknum--;
continue;
}
insert(data);
}
file.close();
display();
return 0;
}
왜 범위 3에 있어야합니까? '{q}'는'{b}'의 형제이며 중첩되지 않습니다. 이 입력을 나무 형태로 표현하고자한다면 데이터 저장 모델을 재고해야한다고 말하고 싶습니다. 범위 수준의 단일 스택이 너무 순진합니다. –
하나의 중첩 된 벡터 만 사용할 수있는 것처럼 매우 평면 구조를 갖는 대신 * tree *를 생각해보십시오. –
중첩 된 벡터가 작동합니까? Google에서 대부분의 결과는 해시 테이블을 기호 테이블에 사용 하겠지만 비슷한 기능을 사용하지는 않겠습니까? 변수의 범위를 나타내는 2D 벡터의 각 행을 묘사합니다 (int a; float b;}. 코드를 오른쪽 행에 넣으면됩니다. –