【問題17】字句解析プログラムを作ろう:完全マスター! 組み込みC言語プログラミング(19)(2/3 ページ)
コンピュータは人間と違って自然に「文字(字句)」を認識することはできません。字句を識別させるには事前に何が字句かを定めて、その規則に沿ったプログラムを作る必要があります。
テキストファイルの処理の仕方
それではプログラムの説明をしましょう。最初はmainです。
今回の課題ではファイルからデータを入力するので、最初に目的のファイルを開きます。17行目の
fp = fopen("words.c", "r");
では、words.cを読み取りモードで開いています。
fopenは成功するとストリームを返します。ストリームとはデータが流れ込む、または流れ出すプログラム内のデータの出入り口のことで、fopenは外部ファイルとストリームを結び付けます。
C言語ではストリームをファイルポインタ(FILE*)で表します。fopneは失敗するとNULLを返すので、
fp = fopen("words.c", "r"); if (fp == NULL) { printf("Can¥'t open file.¥n"); return 1; }
のように、if文でファイルが開けなかったときの処理を書きます。
words.cのmainの仕事は、単語、文字列、文字定数、コメントを見つけることで、これらが先頭の文字から見つけることができるようにC言語の文法はデザインされています。
ここでmainのフローチャートを示します。
ファイルから文字を読み取るにはfgetcを使います。fgetcはファイルの先頭から1文字ずつデータを読み取りますが、ファイルの末尾まで行くとEOFを返します。なので、テキストファイルを文字単位で初期するプログラムの形は、
ch = fgetc(fp); while (ch != EOF) { ここでchを処理する。 ch = fgetc(fp); }
となります。
単語はif文で見つけます。文字が英字であるかはisalphaで判別できるので、単語の先頭の判別は
if (isalpha(ch) || (ch == '_'))
となります。
単語が見つかったらcountをインクリメントし、skip_wordを呼び出します。ファイルの末尾まで行き着いたら、fcloseでストリームから外部ファイルを切り離します。
fclose(fp);
Copyright © ITmedia, Inc. All Rights Reserved.