Ожидаемый тип-спецификатор перед ‘;’ токен в Yacc

Я использую yacc для анализа одного файла и сохранения записей в RAOperator объект класса с использованием yacc.
Я включил соответствующий заголовочный файл в файл yacc и определил указатель на RAOperator объект в директиве% union в файле yacc. Но при компиляции выдает ошибку
следующее:

exp.y:12:28: error: expected type-specifier before ‘;’ token

Я прилагаю файл YACC, где объединение используется с классом 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

Решение

В строке, где указана ошибка, возможно ли, что она на самом деле говорит:

RAoperator* operator;

вместо asdf? (включая случай, когда у вас есть #define asdf operator или эквивалент). asdf кажется странным именем тега; operator было бы более логичным, но это зарезервированное слово в C ++ и привело бы именно к сообщению об ошибке, которое вы предоставляете.

"Expected type-specifier before ';' token" это не простая ошибка, чтобы произвести в GCC: это конкретное использование operator это один из немногих известных мне случаев.

2

Другие решения

Проблема связана с тем, куда yacc помещает %{%} код из .y файл. Входит в .tab.c файл, но НЕ в .tab.h файл. Так что если у вас есть какой-либо другой код, который делает #include "y.tab.h", это также необходимо #include "RA.h" Во-первых, или вы получите такие ошибки из-за RAoperator не определено (пока)

С бизоном вы можете использовать %code requires {} указать код C, который будет скопирован в ОБА .tab.c а также .tab.h файлы.

0

По вопросам рекламы [email protected]