Я делаю одну программу на С++, и эта программа должна быть лексическим анализатором, чтобы сделать компилятор. Таким образом, я сделал заголовок "AnalisadorLexical.h", где я определяю все функции и все остальное как указатели на файлы..., "AnalisadorLexical.cpp", где я определяю логику функций и main.cpp.
В main.cpp я прошу пользователя ввести имя файла для анализа и имя для записи результата. Это делается внутри цикла, в то время как для этого пользователь вводит много файлов для анализа. Когда пользователь вводит имя файла шрифта и имя конечного файла, я дважды использую функцию fopen, чтобы открыть первый файл и написать второй. После этого я вызываю конструктор, чтобы получить размер первого файла, чтобы создать вектор, в котором я буду хранить токены файла. Моя проблема заключается в том, что я использую fseek для получения размера файла. Сбой выполнения программы и я не знаю, что делать.
Следует их кодексу.
основной.cpp:
`главный(){
char *c1, *c2;
c1 = new char[30];
c2 = new char[30];
FILE *f1;
FILE *f2;
cout<<"Arquivo de entrada:"<<endl;
while(cin>>c1){
cin>>c2;
f1 = fopen(c1, "r");
f2 = fopen(c2, "w");
AnalisadorLexico al(f1, f2);
al.analiseLexica();
fclose(f1);
fclose(f2);
}
вернуть 0; }`
AnalisadorLexico.cpp — конструктор:
` Анализадорлексико:: Анализадорлексико(ФАЙЛ* f1, ФАЙЛ* f2){
//Aloca os arquivos
fp = f1;//arquivo sendo lido (de entrada)
fs = f2;//arquivo de saída
//tamanho do arquivo
fseek(fp, 0L, SEEK_END);
tk_Size = ftell(fp);
//vetor de tokens
tk_vet = new token[tk_Size];
//inicializa com 0
tk_count = 0;
monta_tabelaPR();
montaSb_vet();
}(...) `
AnalisadorLexico.h — определение конструктора
` (...)
публичный:
//Construtor de classe
AnalisadorLexico(FILE *f1, FILE *f2);
(...) `
Спасибо за вашу помощь, ребята.