我正在用 c++ 做一个程序,这个程序应该是一个词法分析器来制作一个编译器。因此,我创建了标题“AnalisadorLexical.h”,在其中我将所有函数和所有其他内容定义为指向文件的指针......,在“AnalisadorLexical.cpp”中定义了函数和 main.cpp 的逻辑。
在 main.cpp 中,我要求用户输入要分析的文件的名称和写入结果的名称。这是在一个循环中完成的,同时用户输入许多文件进行分析。当用户输入字体文件的名称和最终文件的名称时,我使用函数 fopen 两次打开第一个文件并写入第二个文件。在此之后,我调用构造函数来获取第一个文件的大小以创建一个向量,我将在其中存储文件的标记。我的问题是当我使用 fseek 来获取文件的大小时。程序执行失败,我不知道该怎么办。
遵循他们的代码。
主.cpp:
`int main(){
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 - 构造函数:
`AnalisadorLexico::AnalisadorLexico(FILE* f1, FILE* 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);
(...) `
谢谢你们的帮助。