我正在使用yacc解析一个文件,并使用yacc将记录存储在RAOperator
类对象中。
我在yacc文件中包含了相应的头文件,并在yacc文件中的%union指令中定义了指向RAOperator
对象的指针。但是在编译它时会给出错误
如下:
exp.y:12:28: error: expected type-specifier before ‘;’ token
我正在附加yacc文件,其中union与RAoperator类一起使用。
%{
#include "RA.h"
#include"y.tab.h"
%}
%union
{
char *strng;
vector<string> *atr;
RAoperator* asdf; // This is where error is shown
vector < vector <string> > *table;
}
这是RA.h文件,其中定义了RAoperator。
class RAoperator
{
public:
vector< vector<string> > RArelation;
vector< vector<string> > RAattr;
};
我在RA.h文件中包含了所有必需的头文件。
我已经搜索了很多这个错误,但找不到任何解决方案。
我哪里出错?
答案 0 :(得分:2)
在指示错误的行中,它是否可能实际显示:
RAoperator* operator;
而不是asdf
? (包括你有#define asdf operator
或同等的情况)。 asdf
似乎是一个奇怪的标签名称; operator
更合乎逻辑,但它是C ++中的保留字,会导致您提供的错误消息。
"Expected type-specifier before ';' token"
在gcc中生成并不是一个简单的错误:operator
的这种特殊用法是我所知道的少数几个案例之一。
答案 1 :(得分:0)
问题与yacc从%{
文件中放置%}
... .y
代码的位置有关。它包含在.tab.c
文件中,但不包含在.tab.h
文件中。因此,如果您有任何其他代码#include "y.tab.h"
,则需要#include "RA.h"
首先,或者由于RAoperator
未定义(还),您将收到此类错误
使用bison,您可以使用%code requires {
... }
指定要复制到.tab.c
和.tab.h
文件中的C代码。