0

我正在使用 yacc 解析一个文件并使用 yacc 将记录存储在RAOperator类对象中。RAOperator我在 yacc 文件中包含了相应的头文件,并在 yacc 文件的 %union 指令中定义了指向对象的指针。但是编译的时候报错如下:

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;
}

这是定义 RAoperator 的 RA.h 文件。

class RAoperator
{
public:
vector< vector<string> > RArelation;
vector< vector<string> > RAattr;
};

我在 RA.h 文件中包含了所有必要的头文件。

我已经为此错误进行了很多搜索,但找不到任何解决方案。

我哪里出错了?

4

2 回答 2

2

在指示错误的行中,它是否可能实际上说:

RAoperator* operator;

而不是asdf?(包括您拥有#define asdf operator或同等条件的情况)。asdf似乎是一个奇怪的标签名称;operator会更合乎逻辑,但它是 C++ 中的保留字,会导致您提供的错误消息。

"Expected type-specifier before ';' token"在 gcc 中不容易产生错误:这种特殊用途operator是我所知道的少数情况之一。

于 2013-09-11T19:55:51.100 回答
0

问题与 yacc 将文件中的%{...%}代码放在何处有关.y。它包含在.tab.c文件中,但不在.tab.h文件中。因此,如果您有任何其他代码#include "y.tab.h",它也需要首先,否则由于未定义(尚未)#include "RA.h",您将收到类似的错误RAoperator

使用 bison,您可以使用%code requires {...}指定要复制到 BOTH.tab.c.tab.h文件中的 C 代码。

于 2013-09-11T22:53:12.600 回答