flex.l:17:8:错误:'->'的类型参数无效(具有YYSTYPE'{aka'int'})“ int” {yylval-> fn = 11;返回TYPE; }

问题描述 投票:0回答:1

我正在尝试在flex和bison中创建一个编译器,但是当我尝试编译我的代码时,出现了这种类型的错误我该如何解决这个问题?

flex.l:17:8: error: invalid type argument of ‘->’ (have ‘YYSTYPE’ {aka ‘int’}) "int" {yylval->fn = 11; return TYPE; }

这是弹性文件

%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; }
%%
compiler-errors bison flex-lexer
1个回答
0
投票

通常在语法文件中使用yylval声明定义语义值(%union)的类型。由于您没有显示语法文件,因此不可能更精确地指出问题所在,但是编译器认为yylvalint的事实表明您没有提供任何声明。 (int是默认类型。)

无论如何,除非您请求重入解析器,否则yylval通常将是union(或标量),而不是指针。

© www.soinside.com 2019 - 2024. All rights reserved.