2012-11-15 69 views
3

我試圖讓這個示例代碼工作,但我不斷收到錯誤: 致命錯誤:'y.tab.h'文件未找到 #include「y.tab.h」 。我能做些什麼呢?lex錯誤y.tab.h

%{ 
#include <stdlib.h> 
void yyerror(char *); 
#include "y.tab.h" 
%} 


%% [0-9]+  { 
       yylval = atoi(yytext); 
       return INTEGER; 
       } 


[-+\n]   return *yytext; 



[ \t]  ; /* skip whitespace */ 


.   yyerror("invalid character"); 


%% 




int yywrap(void) { 
return 1; 
} 
+1

犯錯,產生的呢?你有一個yacc語法?因此,在編譯任何東西之前,先運行yacc。 – EJP

回答

0

,您使用的可能創建一個名爲而不是「y.tab.h」你是想在這裏包括「y.tab.c的」輸出文件的YACC文件。你應該嘗試改變它。

2

當您使用-dy運行bison時,會生成flex文件中包含的「y.tab.h」文件。 例如:

flex mylex.l 
bison -dy myparser.y 

,那麼你應該一起編譯他們兩個:

gcc lex.yy.c myparser.tab.c -o mycompiler.exe