我正在尝试使用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循环中。它根本没有进入循环。
有什么想法? 谢谢, 罗伯特
答案 0 :(得分:2)
yyin实际上是否在某处获得了有意义的价值?也许尝试分配它:
yyin = stdin;
在主循环之前。
编辑:并且可能尝试不将其定义为“extern”,除非它实际上已在其他地方定义。