Lex & YACC 3

http://d.hatena.ne.jp/longicorn/20080910#p1 の続き。


自前で構文解析の練習の前に課題が1つ。
今まで標準入力からのみだったけどファイルからの入力に対応する必要が有る。


yyinという変数があるのでそれにFILEポインタを与えればいいらしい。

extern FILE *yyin;

int main(int argc, char **argv){
	FILE *fp;

	if(argc == 2){
		fp = fopen(argv[1], "r");
		if(fp == NULL){
			return 1;
		}
		yyin = fp;
	}

	if(yyparse() != 0){
		fprintf(stderr, "yyparse() error\n");
	}
	fclose(fp);

	return 0;
}


こんな感じで引数にファイルが指定されていればそちらを使うようにする。
これで問題なくファイルからの入力が可能になった。