gpt4 book ai didi

c++ - Bison 的错误 : request for member ‘charTokens’ in something not a structure or union

转载 作者:行者123 更新时间:2023-11-28 07:55:01 24 4
gpt4 key购买 nike

我在使用 bison/flex 时遇到了这个问题(我看过其他帖子,但我没有在任何地方定义 YYSTYPE,所以这不是这里的问题)。我想使用 %union 将变量从词法分析器传递到 .y。这是我的

%{
#include "simple-expr.tab.h"
#include <math.h>
extern double vbltable[26];
extern int yyval;
%}

%%
([0-9]+|([0-9]*\.[0-9]+)([eE][-+]?[0-9]+)?) { yyval.integerID = atoi(yytext); return ID; }
\* { yyval.charTokens = yytext; return TIMES; }
\+ { yyval.charTokens = yytext; return PLUS; }
\( { yyval.charTokens = yytext; return LPAREN; }
\) { yyval.charTokens = yytext; return RPAREN; }
[ \t\n] ;
%%

和 yacc:

%{
%}

%union {
int integerID;
char* charTokens;
}

%token <charTokens> PLUS TIMES LPAREN RPAREN
%token <integerID> ID

%%
e : e PLUS t { printf("FROM THE yypars.y %c", PLUS); }
| t
;
t : t TIMES f
| f
;
f : LPAREN e RPAREN
| ID
;

%%

这些是我遇到的错误:

simple-expr.lex:9:8: 错误:请求成员“integerID”不是结构或 union simple-expr.lex:10:8: 错误:请求成员“charTokens”不是结构或 union simple-expr.lex:11:8: 错误:请求成员“charTokens”不是结构或 union simple-expr.lex:12:8: 错误:请求成员“charTokens”不是结构或 union simple-expr.lex:13:8: 错误:请求成员“charTokens”不是结构或 union make: * [简单表达式] 错误 1

正如我之前所说 - 我没有在任何地方定义 YYSTYPE,所以这应该不是问题。

最佳答案

将信息从词法分析器传递到解析器的变量名称是 yylval 而不是 yyval。它在 *.tab.h 中自动声明为正确的类型。所以这应该有效

%{
#include "simple-expr.tab.h"
#include <math.h>
extern double vbltable[26];
%}

%%
([0-9]+|([0-9]*\.[0-9]+)([eE][-+]?[0-9]+)?) { yylval.integerID = atoi(yytext); return ID; }
\* { yylval.charTokens = yytext; return TIMES; }
\+ { yylval.charTokens = yytext; return PLUS; }
\( { yylval.charTokens = yytext; return LPAREN; }
\) { yylval.charTokens = yytext; return RPAREN; }
[ \t\n] ;
%%

关于c++ - Bison 的错误 : request for member ‘charTokens’ in something not a structure or union,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12869885/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com