首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >bison的错误:在非结构或联盟中请求成员“charTokens”

bison的错误:在非结构或联盟中请求成员“charTokens”
EN

Stack Overflow用户
提问于 2012-10-13 04:15:53
回答 1查看 660关注 0票数 0

bison/flex有这个问题(我见过其他帖子,但我没有在任何地方定义YYSTYPE,所以这不是问题所在)。我希望使用%union将变量从lexer传递到.y。这就是我所拥有的

代码语言:javascript
运行
复制
%{
#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] ;
%%

雅克:

代码语言:javascript
运行
复制
%{
%}

%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
    ;

%%

以下是我所犯的错误:

简单-expr.lex:9:8:错误:请求非结构中的成员‘integerID’或联合简单-expr.lex:10:8:请求非结构或联合简单中的成员‘charTokens’-expr.lex:11:8:错误:请求非结构中的成员‘charTokens’,或者联合简单-expr.x:12:8:错误:对非结构或联合中的成员‘charTokens’的请求-expr.lex:13:8:错误:请求成员‘charTokens’。不是结构或联合:*简单-扩展错误1

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-13 06:27:29

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

代码语言:javascript
运行
复制
%{
#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] ;
%%
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12869885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档