Top.Mail.Ru
Ответы
Аватар пользователя
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+2

Синтаксический анализатор С++ помогите, пж

помогите, пж
программа синтаксического анализатора не проходит тест
int main ()
{
int d;
d = 3;
}

На выводе выходит ошибка присвоение значения неизвестной переменной d, но она инициализирована
Как сделать так, чтобы программа научилась хранить переменные?


void SyntaxAnalyzer::ParseStatement() {
if (currentToken == typeID) {
char name[100];
strcpy(name, currentLex);
GetNextToken();

if (!sem->semanticCheckVariable(name)) {
Error("Unknown variable");
return;
}
}
bool TSemantic::semanticCheckVariable(const char* name) { //проверка, что для переменной ввели тип данных
if (!scopes.empty()) {
auto& currentScope = scopes.top ();
return currentScope.count(name) > 0;
}
return false;
}

По дате
По рейтингу
Аватар пользователя
Оракул
4мес
1234567891011121314151617181920212223242526272829303132333435363738
 void TSemantic::addVariable(const char* name, const char* type) { 
    if (!scopes.empty()) { 
        auto& currentScope = scopes.top(); 
        currentScope[name] = type; 
    } 
} 
 
void SyntaxAnalyzer::ParseStatement() { 
    if (currentToken == typeInt || currentToken == typeFloat) { 
        char type[100]; 
        strcpy(type, currentLex); 
        GetNextToken(); 
         
        if (currentToken == typeID) { 
            char name[100]; 
            strcpy(name, currentLex); 
            GetNextToken(); 
             
            sem->addVariable(name, type); 
             
            if (currentToken == typeSemicolon) { 
                GetNextToken(); 
            } else { 
                Error("Expected semicolon"); 
            } 
        } 
    } 
    else if (currentToken == typeID) { 
        char name[100]; 
        strcpy(name, currentLex); 
        GetNextToken(); 
         
        if (!sem->semanticCheckVariable(name)) { 
            Error("Unknown variable"); 
            return; 
        } 
    } 
}