野牛:存储自定义课程
bison: store custom classes
我现在正在学习野牛并用它编写玩具编译器。正如我发现,我可以使用%Union指令存储不同的值,但可悲的是,Union不支持我自己的课程。我该如何保存它们?假设我有一个称为object_type
的基类;该类具有几个虚拟功能,以及一些继承,例如bool_type
,int_type
,等。我可以创建一个指针object_type*
,该指针可以容纳任何类型的子类,但只能容纳一个对象。如果我有一个条件,例如OBJECT AND OBJECT
?如果我将使用Union,我可以使用$1
和$3
获取值;但是,我宁愿使用自己的类型,这些功能需要我需要的功能。可以有解决方案吗?预先感谢!
%{
#include <iostream>
using namespace std;
extern "C" {
int yylex(void);
int yyparse(void);
int yywrap() { return 1; }
} /* extern "C" */
void yyerror(const char *error) {
cerr << error << endl;
} /* error handler */
%}
/*============================================================================*/
/* Create Bison union and stack */
/*============================================================================*/
%code requires {
#ifndef __TYPES_HPP_INCLUDED__
#define __TYPES_HPP_INCLUDED__
#include "types.hpp"
#endif
}
%union {
object_type* pointer;
none_type* none_buffer;
bool_type* bool_buffer;
int_type* int_buffer;
float_type* float_buffer;
bytes_type* bytes_buffer;
} /* union */
g 返回此错误: error: ‘bool_type’ does not name a type
。
您可以使用混合解决方案并存储一个将指针固定到多种不同类型的对象的联合。例如,如果您具有int_type
和bool_type
对象,则可以创建这样的联合:
%union {
int_type* iType;
bool_type* bType;
/* ... */
}
这样,如果您有像OBJECT AND OBJECT
这样的作品,则可以采取
$$ = new bType($1->memberFunctionOnBool() && $3->memberFunctionOnBool());
希望这会有所帮助!
相关文章:
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 在地图中使用自定义删除器存储unique_ptr
- 如何将自定义特征张量类存储到 std::vector 中?
- shared_ptr的删除程序是否存储在自定义分配器分配的内存中?
- 在自定义 STUCT 中存储值会产生编译器错误 [C++]
- 将自定义可绘制对象存储在数组中会导致绘制时出现分割错误
- 无法专门化 std::hash 以unordered_map存储自定义类型
- 通用B树,用于存储自定义对象/数据类型
- 野牛:存储自定义课程
- 创建具有自动存储的自定义对象并推送回 std::vector 时访问冲突
- 是否有自定义内存分配器设计模式不在其分配中存储元数据
- 自定义结构化存储 IPropertySetStorage
- 使用Rocksdb存储自定义数据类型
- 自定义分配器,用于将stl矢量存储在OpenGL缓冲区对象中
- 在QStandardItemModel中存储自定义对象
- 如何将自定义对象存储在向量中,以便在服务器的生命周期中存储
- 如何在c++中存储自定义对象的矩阵
- FLENS的自定义存储
- 为什么这个自定义链表不存储 c++ 中给出的每个元素?
- 将std::string和自定义对象存储在std::pair中