2013-10-06 72 views
0

編譯lex程序時出現錯誤: 'yylval'的衝突類型 extern YYSTYPE * yylval;'yylval'的flex和bison衝突類型

任何想法如何糾正這一個? 這在該法碼

%{ 
    #include<stdio.h> 
    #include"y.tab.h" 
    extern char *yylval; 
%} 

%% 
"int"|"float"|"char"|"double" { yylval=strdup(yytext); return TYP;} 
[a-z A-Z][a-z A-Z 0-9]* { yylval=strdup(yytext); return ID;} 
";" return SEMI; 
"," return COMA; 
"{" return LB; 
"}" return RB; 
"\n" return NL; 
[\t]+; 
.; 
%% 
+0

這在'bison'的文檔中有很好的介紹。更改YYLVAL的類型取決於您擁有的Bison版本。請參閱http://www.gnu.org/software/bison/manual/html_node/Rpcalc-Declarations.html#RpcalcDeclarations – Gene

回答

2

您定義yylval兩次 - 一次在你.Y文件YYSTYPE(其中出口y.tab.h),並在你的代碼法第二次爲char *。擺脫extern char *yylval;和多個定義將消失,但您還需要更改使用yylval在lex代碼中以與您在.y文件中定義的任何內容兼容。