flex.l:17:8: error: invalid type argument of ‘->’ (have ‘YYSTYPE’ {aka ‘int’}) "int" {yylval->fn = 11; return TYPE; }
flex.l:17:8: error: invalid type argument of ‘->’ (have ‘YYSTYPE’ {aka ‘int’}) "int" {yylval->fn = 11; return TYPE; }
我试图在 flex 和 bison 中创建一个编译器,但是当我尝试编译我的代码时,我遇到了这种类型的错误
我该如何解决这个问题??
flex.l:17:8: error: invalid type argument of ‘->’ (have ‘YYSTYPE’ {aka ‘int’}) "int" {yylval->fn = 11; return TYPE; }
这是 flex 文件
%option header-file="flex.lex.h"
%{
#include "bison.tab.h"
#include "dichiarazioni.h"
%}
%%
"global_variables" { return VAR; }
"events" { return EVENT; }
"commands" { return COMMAND; }
"state" { return STATE; }
"actions" { return ACTION; }
"char" {yylval->fn = 10; return TYPE; }
"int" {yylval->fn = 11; return TYPE; }
"float" { yylval->fn = 12; return TYPE; }
"double" { yylval->fn = 13; return TYPE; }
"void" { yylval->fn = 14; return TYPE; }
"inc" { yylval->fn = 24; return OPERATORE; }
"dec" { yylval->fn = 25; return OPERATORE; }
"set" { yylval->fn = 26; return OPERATORE; }
print_schermo_message { yylval->fn = 40; return PRINT; }
[0-9]+ { return NUMBER; }
([a-z]+[_a-z0-9]*) { return ALPHA; }
"+" { yylval->fn = 20; return OPERATORE; }
"-" { yylval->fn = 21; return OPERATORE; }
"*" { yylval->fn = 22; return OPERATORE; }
"/" { yylval->fn = 23; return OPERATORE; }
">" { yylval->fn = 1; return CMP; }
"<" { yylval->fn = 2; return CMP; }
"!=" { yylval->fn = 3; return CMP; }
"==" { yylval->fn = 4; return CMP; }
">=" { yylval->fn = 5; return CMP; }
"<=" { yylval->fn = 6; return CMP; }
"&&" { yylval->fn = 7; return CMP; }
"||" { yylval->fn = 8; return CMP; }
%%
语义值的类型 (yylval
) 通常使用 %union
声明在语法文件中定义。由于您没有显示语法文件,因此无法更准确地说明问题所在,但编译器认为 yylval
是 int
这一事实表明您没有提供任何声明。 (int
是默认类型。)
在任何情况下,除非您请求可重入解析器,否则 yylval
通常是 union
(或标量)而不是指针。
有关如何声明和使用语义值的更多详细信息,请参阅 bison manual。
我试图在 flex 和 bison 中创建一个编译器,但是当我尝试编译我的代码时,我遇到了这种类型的错误 我该如何解决这个问题??
flex.l:17:8: error: invalid type argument of ‘->’ (have ‘YYSTYPE’ {aka ‘int’}) "int" {yylval->fn = 11; return TYPE; }
这是 flex 文件
%option header-file="flex.lex.h"
%{
#include "bison.tab.h"
#include "dichiarazioni.h"
%}
%%
"global_variables" { return VAR; }
"events" { return EVENT; }
"commands" { return COMMAND; }
"state" { return STATE; }
"actions" { return ACTION; }
"char" {yylval->fn = 10; return TYPE; }
"int" {yylval->fn = 11; return TYPE; }
"float" { yylval->fn = 12; return TYPE; }
"double" { yylval->fn = 13; return TYPE; }
"void" { yylval->fn = 14; return TYPE; }
"inc" { yylval->fn = 24; return OPERATORE; }
"dec" { yylval->fn = 25; return OPERATORE; }
"set" { yylval->fn = 26; return OPERATORE; }
print_schermo_message { yylval->fn = 40; return PRINT; }
[0-9]+ { return NUMBER; }
([a-z]+[_a-z0-9]*) { return ALPHA; }
"+" { yylval->fn = 20; return OPERATORE; }
"-" { yylval->fn = 21; return OPERATORE; }
"*" { yylval->fn = 22; return OPERATORE; }
"/" { yylval->fn = 23; return OPERATORE; }
">" { yylval->fn = 1; return CMP; }
"<" { yylval->fn = 2; return CMP; }
"!=" { yylval->fn = 3; return CMP; }
"==" { yylval->fn = 4; return CMP; }
">=" { yylval->fn = 5; return CMP; }
"<=" { yylval->fn = 6; return CMP; }
"&&" { yylval->fn = 7; return CMP; }
"||" { yylval->fn = 8; return CMP; }
%%
语义值的类型 (yylval
) 通常使用 %union
声明在语法文件中定义。由于您没有显示语法文件,因此无法更准确地说明问题所在,但编译器认为 yylval
是 int
这一事实表明您没有提供任何声明。 (int
是默认类型。)
在任何情况下,除非您请求可重入解析器,否则 yylval
通常是 union
(或标量)而不是指针。
有关如何声明和使用语义值的更多详细信息,请参阅 bison manual。