【问题标题】:flex and bison conflicting types for ‘yylval’'yylval' 的 flex 和 bison 冲突类型
【发布时间】:2013-10-06 03:50:57
【问题描述】:

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

【问题讨论】:

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


【解决方案1】:

您将yylval 定义了两次——一次在您的.y 文件中定义为YYSTYPE(导出到y.tab.h),第二次在您的lex 代码中定义为char *。去掉 extern char *yylval; 并且多个定义将消失,尽管您还需要在 lex 代码中更改 yylvaluses 以与您在其中定义的任何内容兼容你的.y 文件。

【讨论】:

    猜你喜欢
    • 2011-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多