SIC アセンブリ コードからシンボル テーブルを生成したいと考えています。そのために、すべての文字列をアセンブリ コードから分離しようとしました。したがって、そのための最初のステップを試みているときに、このコードを試しました。
ここで、私が試みたのは、アセンブリ コードをファイルから 1 行ずつ読み取ることです。次に、行内の文字列をトークンに分離します。
(コードに記載されているように) トークン分離セクションを削除すると、すべての行が期待どおりに印刷されます。しかし、トークンの分離と一緒に実行すると、最初の行が読み取られ、トークンが期待どおりに分離されます。しかし、2行目では、セグメンテーション違反としてエラーが発生しています。どこで間違ったのか追跡できませんでした。
だから、専門家からの説明が必要です。
前もって感謝します。
FILE* sourceCode = fopen("/home/muthu/LangFiles/SIC/PASS1/PROGRAM.txt","r"); if(checkForFileOpeningErrors() == ERROR) //Iam using separate function return EXIT_FAILURE; //Terminate the program. int maxLineLength = 50; while(1) { char* lineReader = NULL; // since getline will reallocate. if( getline(&lineReader,(size_t*)&maxLineLength,sourceCode) == -1 ) break; printf("%s",lineReader); // TOKEN SEPARATION STARTS HERE.... If I comment this section out iam getting all lines printed char* wordReader; wordReader = strtok(lineReader," \n"); printf("%s\n",wordReader); while(1) { wordReader = strtok(NULL," \n"); printf("%s\n",wordReader); } // TOKEN SEPARATION ENDS HERE.... }
私のファイル:
COPY START 1000
FIRST STL RETADR
CLOOP JSUB RDREC
LDA LENGTH
COMP ZERO
JEQ ENDFIL
JSUB WRREC
J CLOOP
.
.
.
END
私のサンプル出力:
muthu@muthu-G31M-ES2L:~/LangFiles/PASS1$ ./a.out
All Files successfully opened!! Operation has begun...
COPY START 1000
COPY
START
1000
segmentation Fault.