在Bison中为$$输入问题
Type issues for $$ in Bison
我在bison中遇到了一些类型问题
我有一个名为program
的语法规则,我试图使用$$ = new Node("Program");
我有类型定义为%type <Node> program
,节点类定义在一个单独的头文件,包括在定义部分。
我得到一个错误error: 'union YYSTYPE' has no member named 'Node'
,我如何去获得正确的类型?
在bison文件中,确保在%联合中包含Node
,并使用小写的node
来防止冲突。此外,您还应该使用%code requires
bison示例(我为这个示例添加了一个名称空间)
%code requires
{
#include "node.h"
}
%union {
ns::Node *node; //notice lowercase node for the type
}
%type <node> program;
/* If using a high enough version of bison implement a destructor */
%destructor { delete $$; } <node>
%%
program: /* empty */ { $$ = new ns::Node("Program"); };
...
标题必须包含在词法分析器中。tab.h
当您使用%type
定义时,生成的解析器假定YYSTYPE(保存已解析的中间值的类型,例如$$
或$1
)是具有与该类型具有相同名称的字段的联合。所以它期望YYSTYPE联合有一个名为Node
的字段。
首先,由于Node
看起来已经是一个类名,您应该为您的bison类型使用不同的标识符:
%type <node> program
然后,你有两个选择:
a)使用%union
指定YYSTYPE的定义:
%union {
Node *node;
//other types
}
b)定义宏YYSTYPE为YYSTYPE的实际类型,通常,但不一定是联合类型:
union yystype {
Node *node;
//other types
}
#define YYSTYPE yystype
我个人更喜欢选项a)。
相关文章:
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- 编写时C++中的输入重定向问题
- 输入std::数组时出现问题
- 我试图制作一个程序,要求用户输入问题和答案,但程序循环不正确
- 打印时有二叉树问题.用户输入不打印任何内容
- 用户输入字符串的文件附加问题..C++
- 函数以相反的顺序输出输入问题,并改进算法以解释相等的数字
- 每当调试C (Xcode 10.1)时,输入问题
- iostream输入问题
- 井字输入问题
- 多个玩家的键盘输入问题
- 字符输入问题
- 使用 getline() 的字符串输入问题
- 如何在我的C++测验中输入问题
- GLFW操纵杆输入问题
- 在Bison中为$$输入问题
- c++内存/输入问题
- C++ 拆分输入问题
- c++文件输入问题
- 基本c++输入问题