bison和flex分割错误

bison和flex分割错误,bison,lex,Bison,Lex,我试着用奥雷利的书来学习莱克斯和亚克。我试着按照书中的例子,但它给出了分段错误 %{ /** * A lexer for the basic grammar to use for recognizing English sentences. */ #include <stdio.h> extern FILE *yyin; %} %token NOUN PRONOUN VERB ADVERB ADJECTIVE PREPOSITION CONJUNCTION %

我试着用奥雷利的书来学习莱克斯和亚克。我试着按照书中的例子,但它给出了分段错误

%{
 /**
  * A lexer for the basic grammar to use for recognizing English sentences.
  */

  #include <stdio.h>
  extern FILE *yyin;
%}

%token NOUN PRONOUN VERB ADVERB ADJECTIVE PREPOSITION CONJUNCTION

%%
sentence: subject VERB object{ printf("Sentence is valid.\n");}
 ;

subject: NOUN
 | PRONOUN
 ;
object:  NOUN
 ;
%%


main()
{
 while(!feof(yyin)) {
  yyparse();
 }

}
yyerror(char *s)
{
 fprintf(stderr, "%s\n", s);
}
%{
/**
*用于识别英语句子的基本语法的词法。
*/
#包括
外部文件*yyin;
%}
%代词名词代词动词副词形容词介词连词
%%
句子:主语动词宾语{printf(“句子有效。\n”);}
;
主题:名词
|代词
;
宾语:名词
;
%%
main()
{
而(!feof(yyin)){
yyparse();
}
}
yyerror(字符*s)
{
fprintf(标准字符,“%s\n”,s);
}
我用的是flex和bison。 我在while循环的主函数中发现了分段错误。它根本没有进入循环

有什么想法吗? 谢谢
罗伯特

yyin是否在某个地方被赋予了一个有意义的值?也许可以尝试分配它:

yyin = stdin;
就在主回路之前

编辑:可能尝试不将其定义为“外部”,除非它实际上是在其他地方定义的