2

私は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);
}

私はフレックスとバイソンを使用しています。whileループのmain関数でセグメンテーション違反が発生しています。ループにはまったく入っていません。

何かご意見は?ありがとう、ロバート

4

1 に答える 1

2

yyinは実際にどこかで意味のある値を与えられていますか?おそらくそれを割り当ててみてください:

yyin = stdin;

メインループの直前。

編集:実際に別の場所で定義されていない限り、「外部」で定義しないようにしてください。

于 2010-07-23T11:13:24.507 に答える