2010-07-23 91 views
2

我正在尝试使用oreilly书学习lex和yacc。我从书中尝试了下面的例子,但它给出了分段错误。北美野牛和flex分段错误

%{ 
/** 
    * 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和野牛。 我在while循环中的main函数中遇到了段错误。它完全没有进入循环。

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

回答

2

是yyin实际上给了一个有意义的价值的地方?也许尝试分配它:

yyin = stdin; 

就在主循环之前。

编辑:也许尝试不定义它“外部”,除非它实际上定义在其他地方。