'yylval'的flex和bison冲突类型

时间:2013-10-06 03:50:58

标签: compiler-construction bison yacc flex-lexer symbol-table

在编译lex程序时,获得了一个错误:  'yylval'的冲突类型  extern YYSTYPE * yylval;

知道怎么纠正这个吗? 这是lex代码

%{
  #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]+;
 .;
 %%

1 个答案:

答案 0 :(得分:2)

您定义yylval两次 - 一次是.y文件中的YYSTYPE(导出到y.tab.h),第二次定义为char *。码。摆脱extern char *yylval;并且多个定义将会消失,但您还需要更改lex代码中的{em>使用 yylval以与您的任何内容兼容已在您的.y文件中定义。