Compiler construction 对于‘;yylval’;
编译lex程序时,出现一个错误: “yylval”的冲突类型 外部YYSTYPE*yylval 你知道怎么纠正这个吗? 这是法律法规Compiler construction 对于‘;yylval’;,compiler-construction,bison,yacc,flex-lexer,symbol-table,Compiler Construction,Bison,Yacc,Flex Lexer,Symbol Table,编译lex程序时,出现一个错误: “yylval”的冲突类型 外部YYSTYPE*yylval 你知道怎么纠正这个吗? 这是法律法规 %{ #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=s
%{
#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]+;
.;
%%
%{
#包括
#包括“y.tab.h”
外部字符*yylval;
%}
%%
“int”|“float”|“char”|“double”{yylval=strdup(yytext);返回类型;}
[a-z a-z][a-z a-z 0-9]*{yylval=strdup(yytext);返回ID;}
“;”返回半;
返回昏迷;
“{”返回LB;
“}”返回RB;
“\n”返回NL;
[\t]+;
.;
%%
您定义了两次yylval
,一次在.y文件中定义为YYSTYPE
(导出到y.tab.h
),第二次在lex代码中定义为char*
。去掉外部字符*yylval
和多个定义将消失,不过您还需要更改lex code中对yylval
的使用,以便与您在.y
文件中定义的内容兼容。bison的文档中对此进行了详细介绍。更改YYLVAL的类型取决于您拥有的Bison版本。例如,见