0

编译 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]+;
 .;
 %%
4

1 回答 1

2

您定义yylval了两次——一次是YYSTYPE在您的 .y 文件中(导出到y.tab.h),另一次是char *在您的 lex 代码中。摆脱extern char *yylval;并且多个定义将消失,尽管您还需要更改您在 lex 代码中的使用yylval与您在.y文件中定义的任何内容兼容。

于 2013-10-06T20:28:33.550 回答