私はc ++で1つのプログラムを実行しています。このプログラムは、コンパイラを作成するための語彙アナライザーである必要があります。したがって、すべての関数と他のすべてのものをファイルへのポインターとして定義するヘッダー「AnalisadorLexical.h」を作成しました...、関数の論理とmain.cppを定義する「AnalisadorLexical.cpp」。
main.cpp で、分析するファイルの名前と結果を書き込むファイルの名前を入力するようユーザーに求めます。これはループ内で行われ、そのためにユーザーは分析する多くのファイルを入力します。ユーザーがフォントファイルの名前と最終ファイルの名前を入力すると、関数 fopen を2回使用して最初のファイルを開き、2番目のファイルに書き込みます。この後、コンストラクターを呼び出して最初のファイルのサイズを取得し、ファイルのトークンを格納するベクターを作成します。私の問題は、fseek を使用してファイルのサイズを取得するときです。プログラムの実行に失敗し、どうすればよいかわかりません。
彼らのコードに従います。
main.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);
(...) `
助けてくれてありがとう。