我现在正在学习 Bison 并用它编写一个玩具编译器。正如我发现的那样,我可以使用 %union 指令存储不同的值,但遗憾的是 %union 不支持我自己的类。我怎样才能拯救他们?假设我有一个名为object_type
; 这个类有几个虚函数和一些继承者,比如bool_type
,int_type
等等。我可以创建一个指针object_type*
,它可以保存任何类型的子类,但它只能保存一个对象;如果我有条件OBJECT AND OBJECT
怎么办?如果我要使用 union,我可以使用$1
and$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
.