2010-07-23 7 views
2

J'essayais d'apprendre lex et yacc en utilisant le livre oreilly. J'ai essayé de suivre l'exemple du livre, mais cela donne un défaut de segmentation.défaut de segmentation avec bison et 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); 
} 

J'utilise flex et bison. Je reçois un défaut de segmentation dans la fonction principale, dans la boucle while. Il n'entre pas du tout dans la boucle.

Des pensées? Merci, Robert

Répondre

2

Yyin est-il réellement donné une valeur significative quelque part? Peut-être essayer de l'assigner:

yyin = stdin; 

Juste avant la boucle principale.

EDIT: et peut-être essayer de ne pas le définir "extern" à moins qu'il ne soit défini ailleurs.

Questions connexes