bison和flex的分段错误

时间:2010-07-23 11:07:28

标签: bison lex

我正在尝试使用oreilly书来学习lex和yacc。我尝试了从书中的例子,但它给出了分段错误。

%{
 /**
  * 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);
}
我正在使用flex和bison。 我在main函数中遇到了分段错误,在while循环中。它根本没有进入循环。

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

1 个答案:

答案 0 :(得分:2)

yyin实际上是否在某处获得了有意义的价值?也许尝试分配它:

yyin = stdin;

在主循环之前。

编辑:并且可能尝试不将其定义为“extern”,除非它实际上已在其他地方定义。