2010-07-23 82 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; 

就在主循環之前。

編輯:也許嘗試不定義它「外部」,除非它實際上定義在其他地方。