';'之前的预期类型说明符Yacc中的令牌

时间:2013-09-11 17:17:49

标签: c++ bison yacc

我正在使用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文件中包含了所有必需的头文件。

我已经搜索了很多这个错误,但找不到任何解决方案。

我哪里出错?

2 个答案:

答案 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代码。