DOM パーサーを作成するプロジェクトに取り組んでいます。初期段階では、指定されたファイルにタグがいくつあるかを把握しようとしています。内容が次のような XML ファイルがあるとします。これ<abc>
は test file</abc>
です。このため、私は Flex と Bison を使用して文法を記述し、この文法が発生するたびにコードを実行します。これは私のバイソンコードです:<abc>
</abc>
%{
#include <stdio.h>
#include <conio.h>
int yylex();
int yyparse();
FILE *yyin;
int yylineno;
void yyerror(const char*);
%}
%token START_TAG END_TAG
%%
tag:
sTag
| eTag
;
sTag:
START_TAG {printf("start tag encountered");}
;
eTag:
END_TAG
;
%%
int main(){
FILE *myFile;
myFile = fopen("G:\\MCA-2\\project\\09-03-2013\\demo.txt","r");
if(!myFile){
printf("error opening file");
}
yyin = myFile;
do{
yyparse();
} while(!feof(yyin));
fclose(myFile);
return 0;
}
そして、これは私のFlexコードです:
%{
#include "xml.tab.h"
#define YY_DECL extern "C" int yylex()
%}
%option noyywrap
%option yylineno
alpha [a-zA-Z]
digit [0-9]
%%
[ \t] {}
[ \n] {}
{alpha}({alpha}|{digit})* return START_TAG;
%%
これをコンパイルしようとすると、次のようなエラーが発生します。
lex.yy.c : 529:1: エラー: 文字列定数の前に識別子または '(' が必要です。
誰が私が犯している間違いを教えてもらえますか?